package org.kevoree.tools.ui.editor.ws; import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.AsyncHttpClientConfig; import com.ning.http.client.websocket.WebSocket; import com.ning.http.client.websocket.WebSocketTextListener; import com.ning.http.client.websocket.WebSocketUpgradeHandler; import org.kevoree.ContainerRoot; import org.kevoree.api.protocol.Protocol; import org.kevoree.factory.DefaultKevoreeFactory; import org.kevoree.log.Log; import org.kevoree.pmodeling.api.json.JSONModelLoader; import org.kevoree.pmodeling.api.json.JSONModelSerializer; import java.io.IOException; import java.util.concurrent.ExecutionException; /** * Created with IntelliJ IDEA. * User: duke * Date: 01/12/2013 * Time: 12:27 */ public class WebSocketClient { private static JSONModelLoader loader = new JSONModelLoader(new DefaultKevoreeFactory()); private static JSONModelSerializer saver = new JSONModelSerializer(); public static void push(String ip, String port, final ContainerRoot model) throws IOException, ExecutionException, InterruptedException { AsyncHttpClientConfig cf = new AsyncHttpClientConfig.Builder().build(); final AsyncHttpClient c = new AsyncHttpClient(cf); WebSocket websocket = c.prepareGet("ws://" + ip + ":" + port) .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener( new WebSocketTextListener() { @Override public void onMessage(String message) { } @Override public void onFragment(String s, boolean b) { } @Override public void onOpen(WebSocket websocket) { Protocol.PushMessage pushMessage = new Protocol.PushMessage(saver.serialize(model)); websocket.sendTextMessage(pushMessage.toRaw()); //websocket.sendTextMessage(saver.serialize(model)); } @Override public void onClose(WebSocket websocket) { } @Override public void onError(Throwable t) { } } ).build() ).get(); } public static void pull(String ip, String port, final ModelCallBack callback) throws IOException, ExecutionException, InterruptedException { Log.info("Pull from ws://" + ip + ":" + port); AsyncHttpClientConfig cf = new AsyncHttpClientConfig.Builder().build(); final AsyncHttpClient c = new AsyncHttpClient(cf); WebSocket websocket = c.prepareGet("ws://" + ip + ":" + port) .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener( new WebSocketTextListener() { @Override public void onMessage(String message) { try { callback.run((ContainerRoot) loader.loadModelFromString(message).get(0)); } catch (Exception e) { e.printStackTrace(); } finally { c.closeAsynchronously(); } } @Override public void onFragment(String s, boolean b) { } @Override public void onOpen(WebSocket websocket) { websocket.sendTextMessage(new Protocol.PullMessage().toRaw()); } @Override public void onClose(WebSocket websocket) { } @Override public void onError(Throwable t) { } } ).build() ).get(); } public static void main(String[] args) throws IOException, ExecutionException, InterruptedException { } }