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;
}
}
}
}