
org.jfxvnc.net.SampleVncClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jfxvnc-net Show documentation
Show all versions of jfxvnc-net Show documentation
RFB/VNC protocol codec and handler based on netty
package org.jfxvnc.net;
import org.jfxvnc.net.rfb.codec.ProtocolHandler;
import org.jfxvnc.net.rfb.codec.ProtocolState;
import org.jfxvnc.net.rfb.codec.decoder.ServerDecoderEvent;
import org.jfxvnc.net.rfb.codec.encoder.InputEventListener;
import org.jfxvnc.net.rfb.codec.security.SecurityType;
import org.jfxvnc.net.rfb.render.DefaultProtocolConfiguration;
import org.jfxvnc.net.rfb.render.ProtocolConfiguration;
import org.jfxvnc.net.rfb.render.RenderCallback;
import org.jfxvnc.net.rfb.render.RenderProtocol;
import org.jfxvnc.net.rfb.render.rect.ImageRect;
/*
* #%L
* RFB protocol
* %%
* Copyright (C) 2015 comtel2000
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
public class SampleVncClient {
public static void main(String[] args) throws Exception {
ProtocolConfiguration config = new DefaultProtocolConfiguration();
if (args != null && args.length >= 3) {
config.securityProperty().set(SecurityType.VNC_Auth);
config.hostProperty().set(args[0]);
config.portProperty().set(Integer.parseInt(args[1]));
config.passwordProperty().set(args[2]);
config.sharedProperty().set(Boolean.TRUE);
} else {
System.err.println("arguments missing (host port password)");
config.securityProperty().set(SecurityType.VNC_Auth);
config.hostProperty().set("127.0.0.1");
config.portProperty().set(5902);
config.passwordProperty().set("vnc");
config.sharedProperty().set(Boolean.TRUE);
}
String host = config.hostProperty().get();
int port = config.portProperty().get();
// final SslContext sslContext =
// SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE);
EventLoopGroup workerGroup = new NioEventLoopGroup(1);
try {
Bootstrap b = new Bootstrap();
b.group(workerGroup);
b.channel(NioSocketChannel.class);
b.option(ChannelOption.SO_KEEPALIVE, true);
b.option(ChannelOption.TCP_NODELAY, true);
b.handler(new ChannelInitializer() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
// use ssl
// ch.pipeline().addLast(sslContext.newHandler(ch.alloc()));
ch.pipeline().addLast(new ProtocolHandler(new RenderProtocol() {
@Override
public void render(ImageRect rect, RenderCallback callback) {
System.out.println(rect);
callback.renderComplete();
}
@Override
public void exceptionCaught(Throwable t) {
t.printStackTrace();
}
@Override
public void stateChanged(ProtocolState state) {
System.out.println(state);
}
@Override
public void registerInputEventListener(InputEventListener listener) {
}
@Override
public void eventReceived(ServerDecoderEvent evnt) {
System.out.println(evnt);
}
}, config));
}
});
ChannelFuture f = b.connect(host, port).sync();
f.channel().closeFuture().sync();
} finally {
workerGroup.shutdownGracefully();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy