This client provides following functionality
- Support for emitting and listening to remote events
- Automatic reconnection
- Pub/sub
- Authentication (JWT)
Apache License, Version 2.0
For java
dependencies {
compile 'io.github.sac:SocketclusterClientJava:2.0.0'
}for sample java examples visit Java Demo
For android
compile ('io.github.sac:SocketclusterClientJava:2.0.0'){
exclude group :'org.json', module: 'json'
}for sample android demo visit Android Demo
- In case you face any problem while resolving dependencies, you can download jar from here https://dl.bintray.com/sacoo7/Maven/io/github/sac/SocketclusterClientJava/.
- Please report for the issue here #36
Create instance of Socket class by passing url of socketcluster-server end-point
//Create a socket instanceStringurl="ws://localhost:8000/socketcluster/";
Socketsocket = newSocket(url);
Important Note : Default url to socketcluster end-point is always ws://somedomainname.com/socketcluster/.
Implemented using BasicListener interface
socket.setListener(newBasicListener() {
publicvoidonConnected(Socketsocket,Map<String, List<String>> headers) {
System.out.println("Connected to endpoint");
}
publicvoidonDisconnected(Socketsocket,WebSocketFrameserverCloseFrame, WebSocketFrameclientCloseFrame, booleanclosedByServer) {
System.out.println("Disconnected from end-point");
}
publicvoidonConnectError(Socketsocket,WebSocketExceptionexception) {
System.out.println("Got connect error "+ exception);
}
publicvoidonSetAuthToken(Stringtoken, Socketsocket) {
System.out.println("Token is "+ token);
}
publicvoidonAuthentication(Socketsocket,Booleanstatus) {
if (status) {
System.out.println("socket is authenticated");
} else {
System.out.println("Authentication is required (optional)");
}
}
});- For connecting to server:
//This will send websocket handshake request to socketcluster-serversocket.connect();- For connecting asynchronously to server:
//This will send websocket handshake request to socketcluster-serversocket.connectAsync();- By default reconnection to server is not enabled , to enable it :
//This will set automatic-reconnection to server with delay of 2 seconds and repeating it for 30 timessocket.setReconnection(newReconnectStrategy().setDelay(2000).setMaxAttempts(30));
socket.connect();- To disable reconnection :
socket.setReconnection(null); - By default logging of messages is enabled ,to disable :
socket.disableLogging();
- eventname is name of event and message can be String, boolean, Long or JSON-object
socket.emit(eventname,message);
//socket.emit("chat","Hi");- To send event with acknowledgement
socket.emit(eventname, message, newAck() {
publicvoidcall(StringeventName,Objecterror, Objectdata) {
//If error and data is StringSystem.out.println("Got message for :"+eventName+" error is :"+error+" data is :"+data);
}
});- For listening to events :
The object received can be String, Boolean, Long or JSONObject.
socket.on(eventname, newEmitter.Listener() {
publicvoidcall(StringeventName,Objectobject) {
// Cast object to its proper datatypeSystem.out.println("Got message for :"+eventName+" data is :"+data);
}
}); - To send acknowledgement back to server
socket.on(eventname, newEmitter.AckListener() {
publicvoidcall(StringeventName,Objectobject, Ackack) {
// Cast object to its proper datatype System.out.println("Got message :: " + object);
/...
Somelogicgoeshere
.../
if (error){
ack.call(eventName,error,null);
}else{
//Data can be of any data typeack.call(eventName,null,data);
}
//Both error and data can be sent to serverack.call(eventName,error,data);
}
});
- For creating and subscribing to channels:
Socket.Channelchannel = socket.createChannel(channelName);
//Socket.Channel channel = socket.createChannel("yolo"); /** * without acknowledgement */channel.subscribe();
/** * with acknowledgement */channel.subscribe(newAck() {
publicvoidcall(StringchannelName, Objecterror, Objectdata) {
if (error == null) {
System.out.println("Subscribed to channel "+channelName+" successfully");
}
}
});- For getting list of created channels :
List <Socket.Channel> channels=socket.getChannels();- To get channel by name :
Socket.Channelchannel=socket.getChannelByName("yolo");
//Returns null if channel of given name is not present- For publishing event :
// message can have any data type/** * without acknowledgement */channel.publish(message);
/** * with acknowledgement */channel.publish(message, newAck() {
publicvoidcall(StringchannelName,Objecterror, Objectdata) {
if (error == null) {
System.out.println("Published message to channel "+channelName+" successfully");
}
}
});
- For listening to channel event :
channel.onMessage(newEmitter.Listener() {
publicvoidcall(StringchannelName , Objectobject) {
System.out.println("Got message for channel "+channelName+" data is "+data);
}
});/** * without acknowledgement */channel.unsubscribe();
/** * with acknowledgement */channel.unsubscribe(newAck() {
publicvoidcall(StringchannelName, Objecterror, Objectdata) {
if (error == null) {
System.out.println("channel unsubscribed successfully");
}
}
}); - Once logger object is received, it is very easy to set internal logging level of library, applying handler for each log messages.
- It can be received using following code
Loggerlogger = socket.getLogger();- More documentation on handling logging in custom way can be found here http://www.vogella.com/tutorials/Logging/article.html
WebSocketFactory class is responsible for creating websocket instances and handling settings with server, for more
information visit here
To get instance of WebSocketFactory class :
WebSocketFactoryfactory=socket.getFactorySettings();
The following is an example to set a custom SSL context to a WebSocketFactory
instance. (Again, you don't have to call a setSSL* method if you use the default
SSL configuration.)
// Create a custom SSL context.SSLContextcontext = NaiveSSLContext.getInstance("TLS");
// Set the custom SSL context.factory.setSSLContext(context);NaiveSSLContext
used in the above example is a factory class to create an SSLContext which
naively accepts all certificates without verification. It's enough for testing
purposes. When you see an error message "unable to find valid certificate path
to requested target" while testing, try NaiveSSLContext.
If a WebSocket endpoint needs to be accessed via an HTTP proxy, information
about the proxy server has to be set to a WebSocketFactory instance before
creating a WebSocket instance. Proxy settings are represented by
ProxySettings class. A WebSocketFactory instance has an associated
ProxySettings instance and it can be obtained by calling
WebSocketFactory.getProxySettings() method.
// Get the associated ProxySettings instance.ProxySettingssettings = factory.getProxySettings();ProxySettings class has methods to set information about a proxy server such
as setHost method and setPort method. The following is an example to set a
secure (https) proxy server.
// Set a proxy server.settings.setServer("https://proxy.example.com");If credentials are required for authentication at a proxy server, setId
method and setPassword method, or setCredentials method can be used to set
the credentials. Note that, however, the current implementation supports only
Basic Authentication.
// Set credentials for authentication at a proxy server.settings.setCredentials(id, password);