using Fleck; namespace BattleServer { /// /// 客户端链接对象 /// class Client { private IWebSocketConnection socket; public Client(IWebSocketConnection _socket) { socket = _socket; socket.OnBinary = doBinary; } /// /// 接收rpc数据 /// /// private void doBinary(byte[] message) { BattleRpcMessage msg = ProtoDeSerialize(message); // Pb.BattleRpcMessage msg = Deserialize(message); Task.Run(() =>{ handle(msg); }); } /// /// 处理远程请求 /// /// private void handle(BattleRpcMessage msg) { Console.WriteLine("收到战斗消息:{0}", msg.ToString()); int end = battle.Manager.CheckBattle((int)msg.rid); Console.WriteLine("CheckBattle:{0}", end); switch(msg.method){ case "Check": BattleReport report = ProtoDeSerialize(msg.Data.value); HotUpdateScripts.FightRunnerMgr.Instance.StartOnceFight(report); socket.Send(ProtoSerialize(msg)); break; } } /// /// 序列化并返回二进制 /// Serialize an Object and return byte[] /// /// /// public static byte[] ProtoSerialize(T obj) where T : class { using (var stream = new MemoryStream()) { ProtoBuf.Serializer.Serialize(stream, obj); return stream.ToArray(); } } /// /// 通过二进制反序列化 /// Deserialize with byte[] /// /// /// /// public static T ProtoDeSerialize(byte[] msg) where T : class { using (var ms = new MemoryStream(msg)) { var data = ProtoBuf.Serializer.Deserialize(ms); return data; } } } }