/// <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); } } }
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; } }
private void HandleServerFull(PacketReader packetReader) { ServerFull?.Invoke(); }