LingshaSR/gameserver/bin/connection.ml
2024-08-03 15:05:09 +03:00

41 lines
1.4 KiB
OCaml

open Lwt
open Lwt.Syntax
open Printf
open Packet
module CmdMap = Map.Make(Int)
let handlers = let open Handlers in let open Cmdid in CmdMap.(empty
|> add cmd_player_get_token_cs_req Login.on_player_get_token
|> add cmd_player_login_cs_req Login.on_player_login
|> add cmd_player_login_finish_cs_req Login.on_player_login_finish
|> add cmd_player_heart_beat_cs_req Player.on_player_heartbeat
|> add cmd_get_basic_info_cs_req Player.on_get_basic_info
|> add cmd_get_avatar_data_cs_req Avatar.on_get_avatar_data
|> add cmd_get_bag_cs_req Item.on_get_bag
|> add cmd_get_multi_path_avatar_info_cs_req Avatar.on_get_multi_path_avatar_info
|> add cmd_get_mission_status_cs_req Mission.on_get_mission_status
|> add cmd_get_cur_lineup_data_cs_req Lineup.on_get_cur_lineup_data
|> add cmd_get_cur_scene_info_cs_req Scene.on_get_cur_scene_info
|> add cmd_start_cocoon_stage_cs_req Battle.on_start_cocoon_stage
|> add cmd_p_v_e_battle_result_cs_req Battle.on_pve_battle_result
)
let handle pk =
match CmdMap.find_opt pk.cmd handlers with
| Some handler -> Some (handler pk)
| None -> printf "unhandled cmd: %d\n%!" pk.cmd; None
let rec run ic oc =
let* pk = read ic in
let head = Hex.show (Hex.of_string pk.head) in
let body = Hex.show (Hex.of_string pk.body) in
printf "packet cmd: %d, head: %s, body: %s\n%!" pk.cmd head body;
let* () = match handle pk with
| Some pk -> write oc pk
| None -> return_unit
in
run ic oc