61 lines
1.5 KiB
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();
|
|
}
|
|
}
|