package com.codebutler.android_websockets; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.codebutler.android_websockets.HybiParser; public abstract class WebSocketServer { InputStream inputStream; OutputStream outputStream; HybiParser.HappyDataInputStream websocketInputStream; public HybiParser parser; final Object sendLock = new Object(); public WebSocketServer(InputStream input, OutputStream output) { inputStream = input; outputStream = output; websocketInputStream = new HybiParser.HappyDataInputStream(inputStream); parser = new HybiParser(this); } public void start() { try { parser.start(websocketInputStream); } catch (EOFException e) { // eat it! } catch (IOException e) { e.printStackTrace(); } } public WebSocketServer getListener() { return this; } public void send(String data) throws Exception { sendFrame(parser.frame(data)); } public void send(byte[] data) throws Exception { sendFrame(parser.frame(data)); } public void sendFrame(final byte[] frame) throws Exception { synchronized (sendLock) { outputStream.write(frame); outputStream.flush(); } } public abstract void onConnect(); public abstract void onMessage(String message); public abstract void onMessage(byte[] data); public abstract void onDisconnect(int code, String reason); public abstract void onError(Exception error); }