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
|