odyssey-client/src/network/messages.ts

59 lines
1.2 KiB
TypeScript

import { encode as encodeMP, decode as decodeMP } from "@msgpack/msgpack";
export const CLIENT_PROTOCOL = "odynet-a1";
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" }),
};