package org.deviceconnect.message.server;
import java.io.IOException;
import java.util.Map;
import fi.iki.elonen.NanoHTTPD;
import fi.iki.elonen.NanoWSD;
public class TestServer extends NanoWSD {
private ServerCallback mServerCallback;
private WebSocketCallback mWebSocketCallback;
public TestServer() {
super(4035);
}
public void setServerCallback(final ServerCallback serverCallback) {
mServerCallback = serverCallback;
}
public void setWebSocketCallback(WebSocketCallback webSocketCallback) {
mWebSocketCallback = webSocketCallback;
}
@Override
public Response serve(final String uri, final Method method, final Map<String, String> headers,
final Map<String, String> parms, final Map<String, String> files) {
if (mServerCallback != null) {
return mServerCallback.serve(uri, method, headers, parms, files);
} else {
return newFixedLengthResponse(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Not Found");
}
}
@Override
protected WebSocket openWebSocket(final IHTTPSession handshake) {
return new NanoWebSocket(handshake);
}
public interface ServerCallback {
Response serve(final String uri, final Method method, final Map<String, String> headers,
final Map<String, String> parms, final Map<String, String> files);
}
public interface WebSocketCallback {
void onOpen(NanoWSD.WebSocket webSocket);
void onClose(NanoWSD.WebSocket webSocket, WebSocketFrame.CloseCode code, String reason, boolean initiatedByRemote);
void onMessage(NanoWSD.WebSocket webSocket, WebSocketFrame message);
void onPong(NanoWSD.WebSocket webSocket, WebSocketFrame pong);
void onException(NanoWSD.WebSocket webSocket, IOException exception);
}
private class NanoWebSocket extends NanoWSD.WebSocket {
NanoWebSocket(final IHTTPSession handshakeRequest) {
super(handshakeRequest);
}
@Override
protected void onOpen() {
if (mWebSocketCallback != null) {
mWebSocketCallback.onOpen(this);
}
}
@Override
protected void onClose(WebSocketFrame.CloseCode code, String reason, boolean initiatedByRemote) {
if (mWebSocketCallback != null) {
mWebSocketCallback.onClose(this, code, reason, initiatedByRemote);
}
}
@Override
protected void onMessage(WebSocketFrame message) {
if (mWebSocketCallback != null) {
mWebSocketCallback.onMessage(this, message);
}
}
@Override
protected void onPong(WebSocketFrame pong) {
if (mWebSocketCallback != null) {
mWebSocketCallback.onPong(this, pong);
}
}
@Override
protected void onException(IOException exception) {
if (mWebSocketCallback != null) {
mWebSocketCallback.onException(this, exception);
}
}
}
}