From b82fd888f30f7ea86ab1264d21f6f48c9fdaf2aa Mon Sep 17 00:00:00 2001 From: xeon Date: Sun, 4 Aug 2024 19:41:49 +0300 Subject: [PATCH] a way to send notifies --- gameserver/bin/connection.ml | 3 ++- gameserver/bin/packet.ml | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gameserver/bin/connection.ml b/gameserver/bin/connection.ml index 8c888ef..19aa97e 100644 --- a/gameserver/bin/connection.ml +++ b/gameserver/bin/connection.ml @@ -26,6 +26,7 @@ let handle pk = | None -> printf "unhandled cmd: %d\n%!" pk.cmd; None let rec run ic oc = + let open Packet in let* pk = read ic in let head = Hex.show (Hex.of_string pk.head) in @@ -34,7 +35,7 @@ let rec run ic oc = printf "packet cmd: %d, head: %s, body: %s\n%!" pk.cmd head body; let* () = match handle pk with - | Some pk -> write oc pk + |Some res -> (Lwt_list.iter_s (fun pk -> write oc pk) res.packets) | None -> return_unit in diff --git a/gameserver/bin/packet.ml b/gameserver/bin/packet.ml index 994060f..90c9c86 100644 --- a/gameserver/bin/packet.ml +++ b/gameserver/bin/packet.ml @@ -2,6 +2,7 @@ open Lwt open Lwt.Syntax type packet = { cmd: int; head: string; body: string } +type net_result = { packets: packet list } let read ic = let open Lwt_io in @@ -32,11 +33,17 @@ let write oc pk = let* () = flush oc in return_unit -let pack cmd en data = +let build cmd en data = let encoder = Pbrt.Encoder.create () in en data encoder; let buf = Pbrt.Encoder.to_string encoder in { cmd = cmd; head = ""; body = buf; } -let empty cmd = { cmd = cmd; head = ""; body = "" } +let pack cmd en data = + { packets = [ (build cmd en data) ] } + +let merge result pk = + { packets = pk :: result.packets } + +let empty cmd = {packets = [{ cmd = cmd; head = ""; body = "" }]}