peer-at-code-framework/src/dev/peerat/framework/WebSocketReader.java
2023-09-23 11:56:59 +02:00

66 lines
1.3 KiB
Java

package dev.peerat.framework;
import java.io.IOException;
import dev.peerat.framework.utils.json.Json;
public class WebSocketReader extends HttpReader{
public WebSocketReader(HttpReader origin) throws Exception{
super(origin);
}
public <J extends Json> J readJson() throws Exception{
return JSON_PARSER.parse(readLine());
}
@Override
public String readLine() throws IOException{
//read websocket found on StackOverFlow
int buffLenth = 1024;
int len = 0;
byte[] b = new byte[buffLenth];
// rawIn is a Socket.getInputStream();
while (true){
len = read(b);
if (len != -1){
byte rLength = 0;
int rMaskIndex = 2;
int rDataStart = 0;
// b[0] is always text in my case so no need to check;
byte data = b[1];
byte op = (byte) 127;
rLength = (byte) (data & op);
if (rLength == (byte) 126)
rMaskIndex = 4;
if (rLength == (byte) 127)
rMaskIndex = 10;
byte[] masks = new byte[4];
int j = 0;
int i = 0;
for (i = rMaskIndex; i < (rMaskIndex + 4); i++){
masks[j] = b[i];
j++;
}
rDataStart = rMaskIndex + 4;
int messLen = len - rDataStart;
byte[] message = new byte[messLen];
for (i = rDataStart, j = 0; i < len; i++, j++){
message[j] = (byte) (b[i] ^ masks[j % 4]);
}
return new String(message);
} else
break;
}
return null;
}
}