send a ping to test
This commit is contained in:
parent
29641da939
commit
0d6282fe33
3 changed files with 29 additions and 3 deletions
|
@ -89,12 +89,12 @@ bool RpcConnection::Read(rapidjson::Document& message)
|
|||
return false;
|
||||
}
|
||||
readFrame.message[readFrame.length] = 0;
|
||||
message.ParseInsitu(readFrame.message);
|
||||
}
|
||||
|
||||
switch (readFrame.opcode) {
|
||||
case Opcode::Close:
|
||||
{
|
||||
message.ParseInsitu(readFrame.message);
|
||||
lastErrorCode = message["code"].GetInt();
|
||||
const auto& m = message["message"];
|
||||
StringCopy(lastErrorMessage, m.GetString(), sizeof(lastErrorMessage));
|
||||
|
@ -102,11 +102,12 @@ bool RpcConnection::Read(rapidjson::Document& message)
|
|||
return false;
|
||||
}
|
||||
case Opcode::Frame:
|
||||
message.ParseInsitu(readFrame.message);
|
||||
return true;
|
||||
case Opcode::Ping:
|
||||
{
|
||||
MessageFrameHeader frame{ Opcode::Pong, 0 };
|
||||
if (!connection->Write(&frame, sizeof(MessageFrameHeader))) {
|
||||
readFrame.opcode = Opcode::Pong;
|
||||
if (!connection->Write(&readFrame, sizeof(MessageFrameHeader) + readFrame.length)) {
|
||||
Close();
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -6,6 +6,8 @@ const OPCODES = {
|
|||
HANDSHAKE: 0,
|
||||
FRAME: 1,
|
||||
CLOSE: 2,
|
||||
PING: 3,
|
||||
PONG: 4,
|
||||
};
|
||||
|
||||
let PipePath;
|
||||
|
@ -47,9 +49,17 @@ class RpcMessage {
|
|||
return RpcMessage.serialize(opcode, {code, message});
|
||||
}
|
||||
|
||||
static sendPing(message) {
|
||||
const opcode = OPCODES.PING;
|
||||
return RpcMessage.serialize(opcode, {message});
|
||||
}
|
||||
|
||||
static deserialize(buff) {
|
||||
const opcode = buff.readInt32LE(0);
|
||||
const msgLen = buff.readInt32LE(4);
|
||||
if (msgLen == 0) {
|
||||
return {opcode, data: ''};
|
||||
}
|
||||
if (buff.length < (msgLen + 8)) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -58,3 +58,18 @@ replServer.defineCommand('kill', {
|
|||
}
|
||||
});
|
||||
|
||||
replServer.defineCommand('ping', {
|
||||
help: 'Ping all clients',
|
||||
action() {
|
||||
this.bufferedCommand = '';
|
||||
Object.keys(global.connections).forEach((who) => {
|
||||
const sock = global.connections[who];
|
||||
if (sock) {
|
||||
console.log('pinging', who);
|
||||
sock.write(RpcMessage.sendPing('hello'));
|
||||
}
|
||||
})
|
||||
this.displayPrompt();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue