private void DealLogin(Msg_ReqLogin 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.PutByte((byte)EMsgSC.L2C_RepLogin); var msg = new Msg_RepLogin() { 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); }
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)EMsgSC.C2L_ReqLogin) { Msg_ReqLogin initMsg = null; try { initMsg = reader.Parse <Msg_ReqLogin>(); } #pragma warning disable 168 catch (Exception _e) { #pragma warning restore 168 return; } var ep = peer.EndPoint; DealLogin(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()}"); } }