Esempio n. 1
0
    private static void PLAYER_LEAVE(byte[] bytes)
    {
        PlayerLeave input = PlayerLeave.Parser.ParseFrom(bytes);
        PlayerInfo  pi    = ServerLobbyManager.Instance.GetPlayer(_args);

        if (pi == null)
        {
            string msg = $"Do not find myself!"; // 没有找到自己!
            ServerLobbyManager.Instance.Log("LobbyMsgReply PLAYER_LEAVE Error - " + msg);
            return;
        }
        if (input.TokenId != pi.Enter.TokenId)
        {
            string msg = $"It's not me that leaves, it must be yourself!"; // 离开的不是自己, 必须是自己!
            ServerLobbyManager.Instance.Log("LobbyMsgReply PLAYER_LEAVE Error - " + msg);
            return;
        }

        ServerLobbyManager.Instance.RemovePlayer(_args);
        PlayerLeaveReply output = new PlayerLeaveReply()
        {
            TokenId  = pi.Enter.TokenId,
            IsKicked = false,
            Ret      = true,
        };

        ServerLobbyManager.Instance.SendMsg(_args, LOBBY_REPLY.PlayerLeaveReply, output.ToByteArray());
        ServerLobbyManager.Instance.Log($"MSG: User leaves the lobby! Account:<{pi.Enter.Account}> - TokenId:<{pi.Enter.TokenId}>"); // 用户离开大厅!
    }
Esempio n. 2
0
 internal void OnPlayerLeave(ClientCloseReason reason)
 {
     if (IsAuthorized)
     {
         PlayerLeave?.Invoke(this, reason);
     }
 }
Esempio n. 3
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (changeCase_ == ChangeOneofCase.PlayerJoin)
            {
                hash ^= PlayerJoin.GetHashCode();
            }
            if (changeCase_ == ChangeOneofCase.PlayerLeave)
            {
                hash ^= PlayerLeave.GetHashCode();
            }
            if (changeCase_ == ChangeOneofCase.HostLeave)
            {
                hash ^= HostLeave.GetHashCode();
            }
            if (token_ != null)
            {
                hash ^= Token.GetHashCode();
            }
            hash ^= (int)changeCase_;
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Esempio n. 4
0
        protected override void ServerOnPlayerDisconnected(int clientId, string reason)
        {
            PlayerLeave?.Invoke(Players[clientId], reason);

            if (Server.ClientInGame(clientId))
            {
                if (false) // TODO DEMO
                {
                    Server.SendPackMsg(new GameMsg_DeClientLeave()
                    {
                        Name     = Server.ClientName(clientId),
                        Reason   = reason,
                        ClientId = clientId,
                    }, MsgFlags.NoSend, -1);
                }

                Server.SendPackMsg(new GameMsg_SvClientDrop()
                {
                    ClientID = clientId,
                    Reason   = reason,
                    Silent   = Config["SvSilentSpectatorMode"] && Players[clientId].Team == Team.Spectators,
                }, MsgFlags.Vital | MsgFlags.NoRecord, -1);
            }

            Players[clientId].OnPlayerLeave(reason);
            Players[clientId] = null;
        }
Esempio n. 5
0
        public void Datahandle(byte[] bytes)
        {
            BaseNetObject bno = NetBaseTool.BytesToObject(bytes) as BaseNetObject;

            if (bno is SystemNetObject)
            {
                SystemNetObject systemNetObject = bno as SystemNetObject;
                if (systemNetObject.GetType() == typeof(Msg))
                {
                    Console.WriteLine(systemNetObject);
                }
                else if (systemNetObject.GetType() == typeof(GetMyUserData))
                {
                    MyUserData = (systemNetObject as GetMyUserData).userData;
                }
                else if (systemNetObject.GetType() == typeof(CreateRoomS2C))
                {
                    transmit = (systemNetObject as CreateRoomS2C).PlayerId;
                    wait.Set();
                }
                else if (systemNetObject.GetType() == typeof(JoinRoomS2C))
                {
                    transmit = (systemNetObject as JoinRoomS2C);
                    wait.Set();
                }
                else if (systemNetObject.GetType() == typeof(GetRoomListS2C))
                {
                    transmit = (systemNetObject as GetRoomListS2C).rooms;
                    wait.Set();
                }
                else if (systemNetObject.GetType() == typeof(PlayerJoinS2C))
                {
                    PlayerJoin?.Invoke((systemNetObject as PlayerJoinS2C).playerId);
                }
                else if (systemNetObject.GetType() == typeof(PlayerLeaveS2C))
                {
                    PlayerLeave?.Invoke((systemNetObject as PlayerLeaveS2C).playerId);
                }
                else if (systemNetObject.GetType() == typeof(GameStart))
                {
                    StartAction?.Invoke();
                }
            }
            else
            {
                GameNetObject gno = bno as GameNetObject;
                if (gno == null)
                {
                    throw new ArgumentException(bno.GetType() + " Can't Used");
                }
                ReceiveAction?.Invoke(gno);
            }
            //防止死锁
            // wait.Set();
        }
Esempio n. 6
0
        public static PlayerLeave GetPlayerLeave(string json_string)
        {
            PlayerLeave temp = new PlayerLeave();
            try {
                //string json_string = File.ReadAllText(SAPPRemote.MainWindow.SettingPath);
                if (Json.IsValid(json_string)) {
                    var s = new JsonSerializerSettings();
                    s.NullValueHandling = NullValueHandling.Ignore;
                    s.ObjectCreationHandling = ObjectCreationHandling.Replace; // without this, you end up with duplicates.

                    temp = JsonConvert.DeserializeObject<PlayerLeave>(json_string, s);
                } else {

                }
            } catch (Exception) {
            }
            return temp;
        }
Esempio n. 7
0
 /// <summary>
 /// Called when a player goes out of range of this crafter.
 /// </summary>
 private void OnPlayerLeave(BasePlayer player)
 {
     SendClearCraftingList(player);
     PlayerLeave?.Invoke(this, player);
 }