コード例 #1
0
ファイル: ClientHandler.cs プロジェクト: neao2002/RS.Core
        /// <summary>
        /// 服务器端接收客户的连接,并构建一个与该客户进行通信的通道,将该通道加入到会话客户队列中.
        /// </summary>
        /// <param name="CShandler">服务器端分配的远程主机会话的通道</param>
        /// <returns>返回分配的该通道ID号</returns>
        public int Accept(ClientHandler CShandler)
        {
            if (_isClose)
            {
                OnError(this, "通道已关闭");
                return(0);
            }
            ClientHandler Ch = CShandler;

            if (_sessionTable.Count >= _clientCount)
            {
                CShandler.Close();
                //服务器已满,发出通知
                ServerFull?.Invoke(this);
                return(0);
            }
            else
            {
                try
                {
                    //将该远程连接加入到列队中
                    int k = Ch.HandlerID;
                    this._sessionTable[k] = Ch;
                    return(Ch.HandlerID);
                }
                catch (Exception e)
                {
                    OnError(this, e.Message);
                    return(0);
                }
            }
        }
コード例 #2
0
    public async Task DataManager(Package p)
    {
        Debug.Log("Incoming Package: " + p.packetType);
        switch (p.packetType)
        {
        case PackageType.Selection:
            await Task.Run(() =>
            {
                Id            = p.senderId;
                var toDisable = (RoleType)Enum.Parse(typeof(RoleType), p.data[1].ToString());

                // disable roles
                if (toDisable == RoleType.OppsCommander)
                {
                    PlayerSelection.oppsCommanderAvailable = false;
                }

                else if (toDisable == RoleType.WeaponsOfficer)
                {
                    PlayerSelection.weaponsOfficerAvailable = false;
                }

                else if (toDisable == RoleType.Captain)
                {
                    PlayerSelection.captainAvailable = false;
                }
            });

            break;

        case PackageType.Connected:
        case PackageType.Disconnected:
            Id = p.senderId;
            var roles = (bool[])p.data[0];

            //Debug.Log(roles[0] + ", " + roles[1] + ", " + roles[2]);

            PlayerSelection.oppsCommanderAvailable  = roles[0];
            PlayerSelection.weaponsOfficerAvailable = roles[1];
            PlayerSelection.captainAvailable        = roles[2];
            break;

        case PackageType.ServerFull:
            ServerFull?.Invoke(p.data[0], new EventArgs());
            break;

        case PackageType.Level:
            Layer.Level = (int)p.data[0];

            if (Layer.Level == 0)
            {
                Debug.Log("TCPClient: Entered Cave");
            }
            else
            {
                Debug.Log("TCPClient: Entered Level " + Layer.Level);
                Layer.LevelChanged = true;
            }
            break;

        case PackageType.Credits:
            Credits.Trigger = true;
            break;
        }
    }
コード例 #3
0
 private void HandleServerFull(PacketReader packetReader)
 {
     ServerFull?.Invoke();
 }