Esempio n. 1
0
    private bool CheckGameAbnormalEnd()
    {
        //判断还剩下多少玩家,如果玩家少于2,则表示至少有玩家主动退出
        if (m_ListPlayer.Count < 2)
        {
            //直接进入GameEnd状态
            SetGameState(FSPGameState.GameEnd, (int)FSPGameEndReason.AllOtherExit);
            AddCmdToCurrentFrame(FSPVKeyBase.GAME_END, (int)FSPGameEndReason.AllOtherExit);
            return(true);
        }
        // 检测玩家在线状态
        for (int i = 0; i < m_ListPlayer.Count; i++)
        {
            FSPPlayer player = m_ListPlayer[i];
            if (player.IsLose())
            {
                m_ListPlayer.RemoveAt(i);
                FSPServer.Instance.DelSession(player.Sid);
                player.Dispose();
                --i;
            }
        }

        //判断还剩下多少玩家,如果玩家少于2,则表示有玩家掉线了
        if (m_ListPlayer.Count < 2)
        {
            //直接进入GameEnd状态
            SetGameState(FSPGameState.GameEnd, (int)FSPGameEndReason.AllOtherLost);
            AddCmdToCurrentFrame(FSPVKeyBase.GAME_END, (int)FSPGameEndReason.AllOtherLost);
            return(true);
        }

        return(false);
    }
Esempio n. 2
0
    public bool AddPlayer(uint playerId, uint sid)
    {
        if (m_eState != FSPGameState.Create)
        {
            return(false);
        }

        FSPPlayer player = null;

        for (int i = 0; i < m_ListPlayer.Count; i++)
        {
            player = m_ListPlayer[i];
            if (player.Id == playerId)
            {
                m_ListPlayer.RemoveAt(i);
                FSPServer.Instance.DelSession(player.Sid);
                player.Dispose();
                break;
            }
        }

        if (m_ListPlayer.Count >= MaxPlayerNum)
        {
            return(false);
        }

        FSPSession session = FSPServer.Instance.AddSession(sid);

        player = new FSPPlayer(playerId, m_aFSPParam.serverTimeout, session, OnPlayerReceive);
        m_ListPlayer.Add(player);

        return(true);
    }
Esempio n. 3
0
 public void EnterFrame()
 {
     for (int i = 0; i < m_ListPlayersExitOnNextFrame.Count; i++)
     {
         FSPPlayer player = m_ListPlayersExitOnNextFrame[i];
         FSPServer.Instance.DelSession(player.Sid);
         player.Dispose();
     }
     m_ListPlayersExitOnNextFrame.Clear();
 }
Esempio n. 4
0
 public void Dispose()
 {
     SetGameState(FSPGameState.None);
     for (int i = 0; i < m_ListPlayer.Count; i++)
     {
         FSPPlayer player = m_ListPlayer[i];
         FSPServer.Instance.DelSession(player.Sid);
         player.Dispose();
     }
     m_ListPlayer.Clear();
     m_ListObjectsForDelayGC.Clear();
     GC.Collect();
     onGameExit = null;
     onGameEnd  = null;
 }