Guest User

Untitled

a guest
Mar 17th, 2015
20
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package test;
  2.  
  3. import com.google.common.collect.Lists;
  4. import com.google.common.hash.Hashing;
  5. import com.google.common.util.concurrent.SettableFuture;
  6. import io.undertow.Undertow;
  7. import io.undertow.servlet.api.DeploymentManager;
  8. import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
  9. import org.xnio.OptionMap;
  10. import org.xnio.Xnio;
  11. import org.xnio.XnioWorker;
  12.  
  13. import javax.websocket.*;
  14. import javax.websocket.server.ServerEndpoint;
  15. import java.io.IOException;
  16. import java.net.URI;
  17. import java.nio.ByteBuffer;
  18. import java.util.List;
  19. import java.util.Random;
  20.  
  21. import static io.undertow.servlet.Servlets.defaultContainer;
  22. import static io.undertow.servlet.Servlets.deployment;
  23. import static io.undertow.websockets.jsr.WebSocketDeploymentInfo.ATTRIBUTE_NAME;
  24.  
  25. public class Test {
  26.  
  27.     private static int MESSAGES = 1000;
  28.  
  29.  
  30.     @ServerEndpoint("/webSocket")
  31.     public static class EchoSocket {
  32.         private List<String> echos = Lists.newLinkedList();
  33.         public static final SettableFuture<List<String>> receivedEchos = SettableFuture.create();
  34.  
  35.         @OnMessage
  36.         public void onMessage(ByteBuffer dataBuffer, Session session) throws IOException {
  37.             byte[] hd = new byte[dataBuffer.remaining()];
  38.             dataBuffer.get(hd);
  39.             String hash = Hashing.crc32().hashBytes(hd).toString();
  40.             echos.add(hash);
  41.             if (echos.size() == MESSAGES)
  42.                 receivedEchos.set(echos);
  43.             session.getBasicRemote().sendBinary(dataBuffer);
  44.         }
  45.  
  46.     }
  47.  
  48.     public static void main(String[] args) throws Exception {
  49.         final Xnio xnio = Xnio.getInstance("nio", Undertow.class.getClassLoader());
  50.         final XnioWorker xnioWorker = xnio.createWorker(OptionMap.builder().getMap());
  51.         final WebSocketDeploymentInfo webSockets = new WebSocketDeploymentInfo()
  52.                 .addEndpoint(EchoSocket.class)
  53.                 .setWorker(xnioWorker);
  54.         final DeploymentManager deployment = defaultContainer()
  55.                 .addDeployment(deployment()
  56.                                        .setClassLoader(Test.class.getClassLoader())
  57.                                        .setContextPath("/")
  58.                                        .setDeploymentName("embedded-websockets")
  59.                                        .addServletContextAttribute(ATTRIBUTE_NAME, webSockets)
  60.                 );
  61.  
  62.         deployment.deploy();
  63.  
  64.  
  65.         final Undertow server = Undertow.builder()
  66.                 .addHttpListener(8080, "localhost")
  67.                 .setHandler(deployment.start())
  68.                 .build();
  69.         server.start();
  70.         final ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build();
  71.         ContainerProvider.getWebSocketContainer()
  72.                 .connectToServer(new Endpoint() {
  73.                                      @Override
  74.                                      public void onOpen(final Session session, EndpointConfig endpointConfig) {
  75.  
  76.                                          try {
  77.                                              RemoteEndpoint.Basic rem = session.getBasicRemote();
  78.                                              List<String> messages = Lists.newLinkedList();
  79.                                              for (int i = 0; i < MESSAGES; i++) {
  80.                                                  byte[] data = new byte[2048];
  81.                                                  (new Random()).nextBytes(data);
  82.                                                  String crc = Hashing.crc32().hashBytes(data).toString();
  83.                                                  System.out.println((1 + i) + ": " + crc);
  84.                                                  rem.sendBinary(ByteBuffer.wrap(data));
  85.                                                  messages.add(crc);
  86.                                              }
  87.                                              System.out.println("Send.");
  88.  
  89.                                              List<String> received = EchoSocket.receivedEchos.get();
  90.  
  91.                                              System.out.println("Match: " + messages.equals(received));
  92.                                              for (int i = 0; i < messages.size(); i++) {
  93.                                                  if (received.size() <= i) {
  94.                                                      System.out.println(i + ": should be " + messages.get(i) + " but is empty.");
  95.                                                  } else {
  96.                                                      if (!messages.get(i).equals(received.get(i))) {
  97.                                                          System.out.println(i + ": should be " + messages.get(i) + " but is " + received.get(i) + " (but found at " + received.indexOf(messages.get(i)) + ").");
  98.                                                      }
  99.                                                  }
  100.                                              }
  101.                                          } catch (Throwable t) {
  102.                                              System.out.println(t);
  103.                                          } finally {
  104.                                              server.stop();
  105.                                          }
  106.                                      }
  107.  
  108.  
  109.                                  }, clientEndpointConfig, new URI("ws://localhost:8080/webSocket")
  110.                 );
  111.     }
  112. }
RAW Paste Data