public void open(String uriString) throws WebSocketException {
URI uri = null;
try {
uri = new URI(uriString);
} catch (URISyntaxException e) {
throw new WebSocketException("Error parsing WebSocket URL:" + uriString, e);
}
this.url = uri;
handshake = new WebSocketHandshake(url);
try {
socket = createSocket();
input = socket.getInputStream();
output = new PrintStream(socket.getOutputStream());
output.write(handshake.getHandshake());
boolean handshakeComplete = false;
boolean header = true;
int len = 1000;
byte[] buffer = new byte[len];
int pos = 0;
ArrayList<String> handshakeLines = new ArrayList<String>();
byte[] serverResponse = new byte[16];
while (!handshakeComplete) {
status = WebSocketStatus.CONNECTING;
int b = input.read();
buffer[pos] = (byte) b;
pos += 1;
if (!header) {
serverResponse[pos - 1] = (byte) b;
if (pos == 16) {
handshakeComplete = true;
}
} else if (buffer[pos - 1] == 0x0A && buffer[pos - 2] == 0x0D) {
String line = new String(buffer, "UTF-8");
if (line.trim().equals("")) {
header = false;
} else {
handshakeLines.add(line.trim());
}
buffer = new byte[len];
pos = 0;
}
}
handshake.verifyServerStatusLine(handshakeLines.get(0));
handshake.verifyServerResponse(serverResponse);
handshakeLines.remove(0);
Map<String, String> headers = new FastMap<String, String>();
for (String line : handshakeLines) {
String[] keyValue = line.split(": ", 2);
headers.put(keyValue[0], keyValue[1]);
}
handshake.verifyServerHandshakeHeaders(headers);
receiver = new WebSocketReceiver(input);
// TODO: Add event parameter
// notifyOpened(null);
receiver.start();
connected = true;
status = WebSocketStatus.OPEN;
} catch (WebSocketException wse) {
throw wse;
} catch (IOException ioe) {
throw new WebSocketException("error while connecting: " + ioe.getMessage(), ioe);
}
}