New opcode: view
This commit is contained in:
@@ -12,6 +12,7 @@ export class User {
|
|||||||
nopRecieveTimeout? : NodeJS.Timer;
|
nopRecieveTimeout? : NodeJS.Timer;
|
||||||
username? : string;
|
username? : string;
|
||||||
connectedToNode : boolean;
|
connectedToNode : boolean;
|
||||||
|
viewMode : number;
|
||||||
rank : Rank;
|
rank : Rank;
|
||||||
msgsSent : number;
|
msgsSent : number;
|
||||||
Config : IConfig;
|
Config : IConfig;
|
||||||
@@ -25,6 +26,7 @@ export class User {
|
|||||||
constructor(ws : WebSocket, ip : IPData, config : IConfig, username? : string, node? : string) {
|
constructor(ws : WebSocket, ip : IPData, config : IConfig, username? : string, node? : string) {
|
||||||
this.IP = ip;
|
this.IP = ip;
|
||||||
this.connectedToNode = false;
|
this.connectedToNode = false;
|
||||||
|
this.viewMode = -1;
|
||||||
this.Config = config;
|
this.Config = config;
|
||||||
this.socket = ws;
|
this.socket = ws;
|
||||||
this.msgsSent = 0;
|
this.msgsSent = 0;
|
||||||
|
|||||||
@@ -197,6 +197,41 @@ export default class WSServer {
|
|||||||
var jpg64 = jpg.toString("base64");
|
var jpg64 = jpg.toString("base64");
|
||||||
client.sendMsg(guacutils.encode("png", "0", "0", "0", "0", jpg64));
|
client.sendMsg(guacutils.encode("png", "0", "0", "0", "0", jpg64));
|
||||||
client.sendMsg(guacutils.encode("sync", Date.now().toString()));
|
client.sendMsg(guacutils.encode("sync", Date.now().toString()));
|
||||||
|
if (this.voteInProgress) this.sendVoteUpdate(client);
|
||||||
|
this.sendTurnUpdate(client);
|
||||||
|
break;
|
||||||
|
case "view":
|
||||||
|
if(client.connectedToNode) return;
|
||||||
|
if(client.username || msgArr.length !== 3 || msgArr[1] !== this.Config.collabvm.node) {
|
||||||
|
// The use of connect here is intentional.
|
||||||
|
client.sendMsg(guacutils.encode("connect", "0"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(msgArr[2]) {
|
||||||
|
case "0":
|
||||||
|
client.viewMode = 0;
|
||||||
|
break;
|
||||||
|
case "1":
|
||||||
|
client.viewMode = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
client.sendMsg(guacutils.encode("connect", "0"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
client.sendMsg(guacutils.encode("connect", "1", "1", this.Config.vm.snapshots ? "1" : "0", "0"));
|
||||||
|
if (this.ChatHistory.size !== 0) client.sendMsg(this.getChatHistoryMsg());
|
||||||
|
if (this.Config.collabvm.motd) client.sendMsg(guacutils.encode("chat", "", this.Config.collabvm.motd));
|
||||||
|
|
||||||
|
if(client.viewMode == 1) {
|
||||||
|
client.sendMsg(guacutils.encode("size", "0", this.VM.framebuffer.width.toString(), this.VM.framebuffer.height.toString()));
|
||||||
|
var jpg = this.VM.framebuffer.toBuffer("image/jpeg");
|
||||||
|
var jpg64 = jpg.toString("base64");
|
||||||
|
client.sendMsg(guacutils.encode("png", "0", "0", "0", "0", jpg64));
|
||||||
|
client.sendMsg(guacutils.encode("sync", Date.now().toString()));
|
||||||
|
}
|
||||||
|
|
||||||
if (this.voteInProgress) this.sendVoteUpdate(client);
|
if (this.voteInProgress) this.sendVoteUpdate(client);
|
||||||
this.sendTurnUpdate(client);
|
this.sendTurnUpdate(client);
|
||||||
break;
|
break;
|
||||||
@@ -604,14 +639,14 @@ export default class WSServer {
|
|||||||
private async newrect(rect : Canvas, x : number, y : number) {
|
private async newrect(rect : Canvas, x : number, y : number) {
|
||||||
var jpg = rect.toBuffer("image/jpeg", {quality: 0.5, progressive: true, chromaSubsampling: true});
|
var jpg = rect.toBuffer("image/jpeg", {quality: 0.5, progressive: true, chromaSubsampling: true});
|
||||||
var jpg64 = jpg.toString("base64");
|
var jpg64 = jpg.toString("base64");
|
||||||
this.clients.filter(c => c.connectedToNode).forEach(c => {
|
this.clients.filter(c => c.connectedToNode || c.viewMode == 1).forEach(c => {
|
||||||
c.sendMsg(guacutils.encode("png", "0", "0", x.toString(), y.toString(), jpg64));
|
c.sendMsg(guacutils.encode("png", "0", "0", x.toString(), y.toString(), jpg64));
|
||||||
c.sendMsg(guacutils.encode("sync", Date.now().toString()));
|
c.sendMsg(guacutils.encode("sync", Date.now().toString()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private newsize(size : {height:number,width:number}) {
|
private newsize(size : {height:number,width:number}) {
|
||||||
this.clients.filter(c => c.connectedToNode).forEach(c => c.sendMsg(guacutils.encode("size", "0", size.width.toString(), size.height.toString())));
|
this.clients.filter(c => c.connectedToNode || c.viewMode == 1).forEach(c => c.sendMsg(guacutils.encode("size", "0", size.width.toString(), size.height.toString())));
|
||||||
}
|
}
|
||||||
|
|
||||||
getThumbnail() : Promise<string> {
|
getThumbnail() : Promise<string> {
|
||||||
|
|||||||
Reference in New Issue
Block a user