Example #1
0
 public IPlayerData GetPlayerData(NetSessionId sessionId)
 {
     return(_playerData[sessionId]);
 }
Example #2
0
 public bool HasPlayerData(NetSessionId sessionId)
 {
     return(_playerData.ContainsKey(sessionId));
 }
Example #3
0
 /// <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;
 }
Example #5
0
 public PlayerData(NetSessionId sessionId)
 {
     SessionId = sessionId;
 }
Example #6
0
 public override void ReadFromBuffer(NetIncomingMessage buffer)
 {
     ServerName       = buffer.ReadString();
     ServerMaxPlayers = buffer.ReadInt32();
     PlayerSessionId  = new NetSessionId(buffer.ReadString());
 }
Example #7
0
            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();
                    }
                }
            }
Example #8
0
 public ConfirmConnectMessage(int assignedUid, NetSessionId sessionId)
 {
     AssignedUid = assignedUid;
     SessionId   = sessionId;
 }
Example #9
0
 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]);
 }