import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import org.knowm.xchange.bitmex.service.BitmexDigest;
import org.knowm.xchange.utils.nonce.ExpirationTimeFactory;
import com.neovisionaries.ws.client.WebSocket;
import com.neovisionaries.ws.client.WebSocketAdapter;
import com.neovisionaries.ws.client.WebSocketFactory;
import si.mazi.rescu.SynchronizedValueFactory;

public class WebSocketChatClient {

 private static SynchronizedValueFactory<Long> nonceFactory = new ExpirationTimeFactory(30);
 static String API_KEY = "";
 static String API_SECRET = "";
 static Long EXPIRES = (long) 0;

 public static String bitmex_signature()
   throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {

  BitmexDigest BD = BitmexDigest.createInstance(API_SECRET);

  String API_SIGNATURE = "";

  String ENDPOINT = "/realtime";

  String VERB = "GET";

  String BITMEX_URL = "wss://www.bitmex.com";

  EXPIRES = nonceFactory.createValue();

  String data = VERB + ENDPOINT + String.valueOf(EXPIRES);

  return BD.digestString(data);

 }

 public static void main(String[] args) throws Exception


    {

     WebSocket ws = new WebSocketFactory().createSocket("wss://www.bitmex.com/realtime?subscribe=account:XBTUSD")


     .addListener(new WebSocketAdapter() {
                @Override
                public void onTextMessage(WebSocket ws, String message) {
                    System.out.println(" message : "+message);
                }
            }).connect();

     String bitmex_signature = bitmex_signature();
     ws.sendText("{\"op\" : \"authKeyExpires\", \"args\" : [\""+API_KEY+"\","+EXPIRES+",\""+bitmex_signature+"\"]}");
     ws.sendText("{\"op\" : \"subscribe\" , \"args\" : [\"position:XBTUSD\"]}");


    }