package org.jboss.pitbull.test;
import org.jboss.pitbull.Connection;
import org.jboss.pitbull.RequestHeader;
import org.jboss.pitbull.StatusCode;
import org.jboss.pitbull.server.HttpServer;
import org.jboss.pitbull.server.HttpServerBuilder;
import org.jboss.pitbull.server.handlers.WebSocketHandler;
import org.jboss.pitbull.server.handlers.stream.StreamRequestHandler;
import org.jboss.pitbull.server.handlers.stream.StreamedResponse;
import org.jboss.pitbull.websocket.TextFrame;
import org.jboss.pitbull.websocket.WebSocket;
import java.io.IOException;
import java.io.InputStream;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class WebSocketEchoServer
{
public static class TextHandler implements WebSocketHandler
{
@Override
public String getProtocolName()
{
return null;
}
@Override
public void onReceivedFrame(WebSocket socket) throws IOException
{
TextFrame frame = (TextFrame)socket.readFrame();
System.out.println("WebSocketVersion: " + socket.getVersion());
System.out.println("Received: " + frame.getText());
try
{
Thread.sleep(10); // sleep so reads can buffer up.
}
catch (InterruptedException e)
{
throw new RuntimeException(e);
}
socket.writeTextFrame(frame.getText());
}
}
public static class EchoHtml implements StreamRequestHandler
{
@Override
public void execute(Connection connection, RequestHeader requestHeader, InputStream requestStream, StreamedResponse response) throws IOException
{
response.setStatus(StatusCode.OK);
response.getHeaders().addHeader("Content-Type", "text/html");
String host = requestHeader.getHeaders().getFirstHeader("Host");
String page = "<!DOCTYPE HTML>\n" +
"<html>\n" +
"<head>\n" +
"<script type=\"text/javascript\">\n" +
"function WebSocketTest()\n" +
"{\n" +
" if (\"WebSocket\" in window)\n" +
" {\n" +
" alert(\"WebSocket is supported by your Browser!\");\n" +
" // Let us open a web socket\n" +
" var ws = new WebSocket(\"ws://" + host + "/websocket\");\n" +
" ws.onopen = function()\n" +
" {\n" +
" // Web Socket is connected, send data using send()\n" +
" ws.send(\"Message to send\");\n" +
" alert(\"Message is sent...\");\n" +
" };\n" +
" ws.onmessage = function (evt) \n" +
" { \n" +
" var received_msg = evt.data;\n" +
" alert(\"Message is received...\");\n" +
" };\n" +
" ws.onclose = function()\n" +
" { \n" +
" // websocket is closed.\n" +
" alert(\"Connection is closed...\"); \n" +
" };\n" +
" }\n" +
" else\n" +
" {\n" +
" // The browser doesn't support WebSocket\n" +
" alert(\"WebSocket NOT supported by your Browser!\");\n" +
" }\n" +
"}\n" +
"</script>\n" +
"</head>\n" +
"<body>\n" +
"<div id=\"sse\">\n" +
" <a href=\"javascript:WebSocketTest()\">Run WebSocket</a>\n" +
"</div>\n" +
"</body>\n" +
"</html>";
response.getOutputStream().write(page.getBytes("UTF-8"));
}
}
public static void main(String[] args) throws Exception
{
HttpServer http = new HttpServerBuilder().connector().add()
.workers(1)
.maxRequestThreads(1).build();
http.start();
TextHandler handler = new TextHandler();
http.register("/websocket", handler);
http.register("/echo.html", new EchoHtml());
try
{
Thread.sleep(1000000);
}
catch (InterruptedException e)
{
}
http.stop();
}
}