2020-10-05 13:10:12 +00:00
|
|
|
import { encode as encodeMP, decode as decodeMP } from "@msgpack/msgpack";
|
|
|
|
|
2020-10-05 15:35:29 +00:00
|
|
|
export const CLIENT_PROTOCOL = "odynet-a1";
|
2020-10-05 13:10:12 +00:00
|
|
|
|
|
|
|
interface ServerCmdHello {
|
|
|
|
type: "Hello";
|
|
|
|
server_name: string;
|
|
|
|
protocol_ver: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface ServerCmdError {
|
|
|
|
type: "Error";
|
|
|
|
error_msg: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
type ServerMessage = ServerCmdHello | ServerCmdError;
|
|
|
|
|
|
|
|
interface ClientCmdHello {
|
|
|
|
type: "Hello";
|
|
|
|
}
|
|
|
|
|
|
|
|
type ClientMessage = ClientCmdHello;
|
|
|
|
|
|
|
|
export enum ServerMessageCode {
|
|
|
|
Hello = 0,
|
|
|
|
Error = 1,
|
|
|
|
}
|
|
|
|
|
|
|
|
export enum ClientMessageCode {
|
|
|
|
Hello = 0,
|
|
|
|
}
|
|
|
|
|
|
|
|
export function decode(data: ArrayBuffer): ServerMessage {
|
|
|
|
const obj = decodeMP(data);
|
|
|
|
const msgtype = parseInt(Object.keys(obj)[0], 10) as ServerMessageCode;
|
|
|
|
const payload = obj[msgtype] as any[];
|
|
|
|
switch (msgtype) {
|
|
|
|
case ServerMessageCode.Hello:
|
|
|
|
return {
|
|
|
|
type: "Hello",
|
|
|
|
server_name: payload[0],
|
|
|
|
protocol_ver: payload[1],
|
|
|
|
};
|
|
|
|
case ServerMessageCode.Error:
|
|
|
|
return { type: "Error", error_msg: payload[0] };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function encode(data: ClientMessage) {
|
|
|
|
switch (data.type) {
|
|
|
|
case "Hello":
|
|
|
|
return encodeMP({ Hello: [] });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
Hello: () => encode({ type: "Hello" }),
|
|
|
|
};
|