~starkingdoms/starkingdoms

ref: 009ee676fa452999dce55982edaa0cb91f365cf8 starkingdoms/starkingdoms-client/src/protocol.ts -rw-r--r-- 2.2 KiB
009ee676 — ghostlyzsh idk 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
export interface ProtoTransform {
    x: number,
    y: number,
    rot: number
}
export enum PlanetType {
    Earth = "Earth"
}
export enum PartType {
    Hearty = "Hearty"
}
export interface Planet {
    planet_type: PlanetType,
    transform: ProtoTransform,
    radius: number
}
export interface Part {
    part_type: PartType,
    transform: ProtoTransform
}
export interface ClientLoginPacket {
    username: string,
    jwt: string | null,
}
export interface SpawnPlayerPacket {
    id: number,
    username: string
}
export interface PlanetPositionsPacket {
    planets: [number, Planet][]
}
export interface PartPositionsPacket {
    parts: [number, Part][]
}
export interface PlayerListPacket {
    players: [number, string][]
}
export interface PlayerLeavePacket {
    id: number
}
export interface SendMessagePacket {
    target: string | null,
    content: string
}
export enum MessageType {
    Server = "Server",
    Error = "Error",
    Chat = "Chat",
    Direct = "Direct"
}
export interface MessagePacket {
    message_type: MessageType,
    actor: string,
    content: string
}

export enum PacketType {
    // serverbound
    ClientLogin = "ClientLogin",
    SendMessage = "SendMessage",
    // clientbound
    SpawnPlayer = "SpawnPlayer",
    PlayerList = "PlayerList",
    PlanetPositions = "PlanetPositions",
    PartPositions = "PartPositions",
    PlayerLeave = "PlayerLeave",
    Message = "Message"
}

export interface Packet {
    t: PacketType,
    c: ClientLoginPacket | SpawnPlayerPacket | PlayerListPacket | PlanetPositionsPacket | PartPositionsPacket | PlayerLeavePacket | SendMessagePacket | MessagePacket
}

export const SERVERBOUND = [PacketType.ClientLogin, PacketType.SendMessage];
export const CLIENTBOUND = [PacketType.SpawnPlayer, PacketType.PlayerList, PacketType.PlanetPositions, PacketType.PartPositions, PacketType.PlayerLeave, PacketType.Message];

export enum Direction {
    Serverbound = "Serverbound",
    Clientbound = "Clientbound",
    InvalidType = "InvalidType"
}

export function type_direction(type: PacketType): Direction {
    if (SERVERBOUND.includes(type)) {
        return Direction.Serverbound;
    } else if (CLIENTBOUND.includes(type)) {
        return Direction.Clientbound;
    } else {
        return Direction.InvalidType;
    }
}