public void RemovePlayerLink(PlayerLink link) { if (sessionMap.ContainsKey(link)) { sessionMap.Remove(link); } }
//收到了新的数据 private void OnDataReceived(PlayerLink link, byte[] data, int offset, int size) { //如果没有连接,那么不接收数据 if (!sessionMap.ContainsKey(link)) { return; } var session = sessionMap[link]; //数据包=长度(int32)+实际数据 //至少要有一个int32的length的描述 if (size < sizeof(Int32)) { throw new Exception("数据错误"); } int length = BitConverter.ToInt32(data, offset); int offsetNew = offset + sizeof(Int32); int lengthNew = size - sizeof(Int32); byte[] d = new byte[lengthNew]; Array.Copy(data, offsetNew, d, 0, lengthNew); var msg = SharedData.DirectProtoBufTools.Deserialize <GameMessage>(d); session.OnMessage(msg); }
//客户端状态发生变化 private void OnEvent(PlayerLink link, PlayerLinkStatus status) { switch (status) { case PlayerLinkStatus.Connected: //创建session var session = new RoomSessionBridge(link, this); sessionMap.Add(link, session); OnNewClient(session); break; default: break; } }
protected void OnRecvData(PlayerLink client, byte[] data, int offset, int size) { //数据包=长度(int32)+实际数据 //至少要有一个int32的length的描述 if (size < sizeof(Int32)) { throw new Exception("数据错误"); } int length = BitConverter.ToInt32(data, offset); int offsetNew = offset + sizeof(Int32); int lengthNew = size - sizeof(Int32); byte[] d = new byte[lengthNew]; Array.Copy(data, offsetNew, d, 0, lengthNew); var msg = SharedData.DirectProtoBufTools.Deserialize <GameMessage>(d); MessageHandler(msg); }
public RoomSessionBridge(PlayerLink l, RoomServerBridge s) { link = l; server = s; }