예제 #1
0
        private void DealInitMsg(Msg_InitMsg initMsg, NetPeer peer, Deserializer reader)
        {
            var    netId   = peer.Id;
            var    account = initMsg.account;
            Player player  = null;

            if (account2PlayerId.TryGetValue(account, out long id))
            {
                player = GetPlayer(id);
                if (player == null)
                {
                    player = CreatePlayer(id, peer);
                }
            }
            else
            {
                player = AddPlayer(peer);
                account2PlayerId.Add(account, player.PlayerId);
            }

            IRoom room = null;

            if (playerId2Room.TryGetValue(player.PlayerId, out IRoom tRoom))
            {
                room        = tRoom;
                player.room = room;
                room.OnReconnect(player);
            }

            var writer = new Serializer();

            writer.Put((byte)EMsgCL.L2C_ReqInit);
            var msg = new Msg_RepInit()
            {
                playerId = player.PlayerId
            };

            if (room != null)
            {
                msg.roomId   = room.RoomId;
                msg.port     = RoomPort;
                msg.ip       = RoomIP;
                msg.childMsg = room.GetReconnectMsg(player);
            }
            else
            {
                msg.roomId = -1;
                msg.ip     = "";
            }

            Debug.Log($"Deal Init msg roomId {msg.roomId} isReconnect {room != null}");
            msg.Serialize(writer);
            var bytes = Compressor.Compress(writer);

            player.SendLobby(bytes);
        }
예제 #2
0
        public void OnDataReceived(NetPeer peer, byte[] data)
        {
            int netID = peer.Id;

            try {
                var reader  = new Deserializer(Compressor.Decompress(data));
                var msgType = reader.GetByte();
                if (msgType >= MAX_HANDLER_IDX)
                {
                    Debug.LogError("msgType out of range " + msgType);
                    return;
                }

                if (msgType == (byte)EMsgCL.C2L_InitMsg)
                {
                    Msg_InitMsg initMsg = null;
                    try {
                        initMsg = reader.Parse <Msg_InitMsg>();
                    }
#pragma warning disable 168
                    catch (Exception _e) {
#pragma warning restore 168
                        return;
                    }

                    DealInitMsg(initMsg, peer, reader);
                    return;
                }

                //Debug.Log($"OnDataReceived netID = {netID}  type:{(EMsgCL)msgType}");
                {
                    if (!CheckMsg(reader, netID, out var player))
                    {
                        return;
                    }
                    var _func = allMsgDealFuncs[msgType];
                    if (_func != null)
                    {
                        _func(player, reader);
                    }
                    else
                    {
                        Debug.LogError("ErrorMsg type :no msgHnadler" + msgType);
                    }
                }
            }
            catch (Exception e) {
                Debug.LogError($"netID{netID} parse msg Error:{e.ToString()}");
            }
        }