예제 #1
0
 public void RemovePlayerLink(PlayerLink link)
 {
     if (sessionMap.ContainsKey(link))
     {
         sessionMap.Remove(link);
     }
 }
예제 #2
0
        //收到了新的数据
        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);
        }
예제 #3
0
        //客户端状态发生变化
        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;
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
 public RoomSessionBridge(PlayerLink l, RoomServerBridge s)
 {
     link   = l;
     server = s;
 }