public IPlayerData GetPlayerData(NetSessionId sessionId) { return(_playerData[sessionId]); }
public bool HasPlayerData(NetSessionId sessionId) { return(_playerData.ContainsKey(sessionId)); }
/// <summary> /// Creates an instance of a PlayerSession. /// </summary public PlayerSession(NetSessionId session) { SessionId = session; }
/// <summary> /// Creates the new mind attached to a specific player session. /// </summary> /// <param name="sessionId">The session ID of the owning player.</param> public Mind(NetSessionId sessionId) { SessionId = sessionId; }
public PlayerData(NetSessionId sessionId) { SessionId = sessionId; }
public override void ReadFromBuffer(NetIncomingMessage buffer) { ServerName = buffer.ReadString(); ServerMaxPlayers = buffer.ReadInt32(); PlayerSessionId = new NetSessionId(buffer.ReadString()); }
public void ProcessPackets() { while (_messageChannel.Reader.TryRead(out var item)) { switch (item) { case ConnectMessage connect: { DebugTools.Assert(IsServer); var writer = connect.ChannelWriter; var uid = _genConnectionUid(); var sessionId = new NetSessionId($"integration_{uid}"); var connectArgs = new NetConnectingArgs(sessionId, new IPEndPoint(IPAddress.IPv6Loopback, 0)); Connecting?.Invoke(this, connectArgs); if (connectArgs.Deny) { writer.TryWrite(new DeniedConnectMessage()); continue; } writer.TryWrite(new ConfirmConnectMessage(uid, sessionId)); var channel = new IntegrationNetChannel(this, connect.ChannelWriter, uid, sessionId, connect.Uid); _channels.Add(uid, channel); Connected?.Invoke(this, new NetChannelArgs(channel)); break; } case DataMessage data: { IntegrationNetChannel?channel; if (IsServer) { if (!_channels.TryGetValue(data.Connection, out channel)) { continue; } } else { if (ServerChannel == null || data.Connection != ServerChannel.ConnectionUid) { continue; } channel = ServerChannel; } var message = data.Message; message.MsgChannel = channel; if (_callbacks.TryGetValue(message.GetType(), out var callback)) { callback(message); } break; } case DisconnectMessage disconnect: { if (IsServer) { if (_channels.TryGetValue(disconnect.Connection, out var channel)) { Disconnect?.Invoke(this, new NetDisconnectedArgs(channel, string.Empty)); _channels.Remove(disconnect.Connection); } } else { _channels.Clear(); } break; } case DeniedConnectMessage _: { DebugTools.Assert(IsClient); ConnectFailed?.Invoke(this, new NetConnectFailArgs("I didn't implement a deny reason!")); break; } case ConfirmConnectMessage confirm: { DebugTools.Assert(IsClient); var channel = new IntegrationNetChannel(this, NextConnectChannel !, _clientConnectingUid, confirm.SessionId, confirm.AssignedUid); _channels.Add(channel.ConnectionUid, channel); Connected?.Invoke(this, new NetChannelArgs(channel)); break; } default: throw new ArgumentOutOfRangeException(); } } }
public ConfirmConnectMessage(int assignedUid, NetSessionId sessionId) { AssignedUid = assignedUid; SessionId = sessionId; }
public IntegrationNetChannel(IntegrationNetManager owner, ChannelWriter <object> otherChannel, int uid, NetSessionId sessionId, int remoteUid) : this(owner, otherChannel, uid, sessionId) { RemoteUid = uid; }
public bool ValidSessionId(NetSessionId index) { return(_sessions.ContainsKey(index)); }
/// <inheritdoc /> public IPlayerSession GetSessionById(NetSessionId index) { return(_sessions[index]); }