using Fleck; using System; using battle; using pb = global::Google.Protobuf; namespace BattleServer { /// /// 客户端链接对象 /// class Client { private IWebSocketConnection socket; public Client(IWebSocketConnection _socket) { socket = _socket; socket.OnBinary = doBinary; } /// /// 接收rpc数据 /// /// private void doBinary(byte[] message) { Pb.BattleRpcMessage msg = Deserialize(message); Task.Run(() => { handle(msg); }); } /// /// 处理远程请求 /// /// private void handle(Pb.BattleRpcMessage msg) { Console.WriteLine("收到战斗消息:{0}", msg.ToString()); int end = battle.Manager.CheckBattle((int)msg.Rid); Console.WriteLine("CheckBattle:{0}", end); Pb.BattleTestMessage message = new Pb.BattleTestMessage(); message.Id = "123123"; message.Msg = "succ"; msg.Data = pb.WellKnownTypes.Any.Pack(message); socket.Send(Serialization(msg)); } /// /// 反序列化protobuf /// /// /// /// public static T Deserialize(byte[] dataBytes) where T : pb.IMessage, new() { T msg = new T(); msg = (T)msg.Descriptor.Parser.ParseFrom(dataBytes); return msg; } /// /// 反序列化protobuf /// /// /// /// public static byte[] Serialization(T msg) where T : pb.IMessage, new() { byte[] result = new byte[msg.CalculateSize()]; pb.CodedOutputStream output = new pb.CodedOutputStream(result); msg.WriteTo(output); output.CheckNoSpaceLeft(); return result; } } }