peer-at-code-framework/src/dev/peerat/framework/WebSocketWriter.java

61 lines
1.5 KiB
Java

package dev.peerat.framework;
import java.io.IOException;
public class WebSocketWriter extends HttpWriter{
public WebSocketWriter(HttpWriter origin) throws Exception{
super(origin);
}
@Override
public void write(String message) throws IOException{
//write websocket found on StackOverFlow
byte[] rawData = message.getBytes();
int frameCount = 0;
byte[] frame = new byte[10];
frame[0] = (byte) 129;
if (rawData.length <= 125){
frame[1] = (byte) rawData.length;
frameCount = 2;
} else if (rawData.length >= 126 && rawData.length <= 65535){
frame[1] = (byte) 126;
int len = rawData.length;
frame[2] = (byte) ((len >> 8) & (byte) 255);
frame[3] = (byte) (len & (byte) 255);
frameCount = 4;
} else {
frame[1] = (byte) 127;
int len = rawData.length;
frame[2] = (byte) ((len >> 56) & (byte) 255);
frame[3] = (byte) ((len >> 48) & (byte) 255);
frame[4] = (byte) ((len >> 40) & (byte) 255);
frame[5] = (byte) ((len >> 32) & (byte) 255);
frame[6] = (byte) ((len >> 24) & (byte) 255);
frame[7] = (byte) ((len >> 16) & (byte) 255);
frame[8] = (byte) ((len >> 8) & (byte) 255);
frame[9] = (byte) (len & (byte) 255);
frameCount = 10;
}
int bLength = frameCount + rawData.length;
byte[] reply = new byte[bLength];
int bLim = 0;
for (int i = 0; i < frameCount; i++){
reply[bLim] = frame[i];
bLim++;
}
for (int i = 0; i < rawData.length; i++){
reply[bLim] = rawData[i];
bLim++;
}
write(reply);
flush();
}
}