LingshaSR/gameserver/bin/connection.ml

43 lines
1.5 KiB
OCaml
Raw Normal View History

2024-08-03 12:05:09 +00:00
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 =
2024-08-04 16:41:49 +00:00
let open Packet in
2024-08-03 12:05:09 +00:00
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
2024-08-04 16:41:49 +00:00
|Some res -> (Lwt_list.iter_s (fun pk -> write oc pk) res.packets)
2024-08-03 12:05:09 +00:00
| None -> return_unit
in
run ic oc