示例#1
0
 public override bool Equals(object obj)
 {
     return(obj switch
     {
         UnturnedUser other => Equals(other),
         UnturnedPendingUser otherPending => Equals(otherPending),
         _ => false
     });
示例#2
0
        protected virtual void OnPendingPlayerConnecting(ValidateAuthTicketResponse_t callback, ref bool isValid, ref string explanation)
        {
            if (m_PendingUsers.Any(d => d.SteamId == callback.m_SteamID))
            {
                return;
            }

            if (!isValid)
            {
                return;
            }

            //todo check if it is working, if not this should be patched
            var isPendingValid    = isValid;
            var rejectExplanation = explanation;

            AsyncHelper.RunSync(async() =>
            {
                var steamPending = Provider.pending.FirstOrDefault(d => d.playerID.steamID == callback.m_SteamID);
                if (steamPending == null)
                {
                    return;
                }

                var pendingUser = new UnturnedPendingUser(this, m_UserDataStore, steamPending);
                var userData    = await m_UserDataStore.GetUserDataAsync(pendingUser.Id, pendingUser.Type);
                if (userData != null)
                {
                    userData.LastSeen        = DateTime.Now;
                    userData.LastDisplayName = pendingUser.DisplayName;
                    await m_UserDataStore.SetUserDataAsync(userData);
                }
                else
                {
                    await m_DataSeeder.SeedUserDataAsync(pendingUser.Id, pendingUser.Type, pendingUser.DisplayName);
                    await m_EventBus.EmitAsync(m_Runtime, this, new UserFirstConnectEvent(pendingUser));
                }

                m_PendingUsers.Add(pendingUser);

                var userConnectingEvent = new UserConnectEvent(pendingUser);
                await m_EventBus.EmitAsync(m_Runtime, this, userConnectingEvent);

                if (!string.IsNullOrEmpty(userConnectingEvent.RejectionReason))
                {
                    isPendingValid    = false;
                    rejectExplanation = userConnectingEvent.RejectionReason;
                }

                if (userConnectingEvent.IsCancelled)
                {
                    isPendingValid = false;
                }
            });

            isValid     = isPendingValid;
            explanation = rejectExplanation;
        }
        protected virtual void FinishSession(UnturnedPendingUser pending)
        {
            if (pending.Session is UnturnedPendingUserSession session)
            {
                session.OnSessionEnd();
            }

            m_PendingUsers.Remove(pending);
        }
示例#4
0
        public UnturnedUser(IUserDataStore userDataStore, Player player, UnturnedPendingUser pending = null) : base(userDataStore)
        {
            Type        = KnownActorTypes.Player;
            Player      = player;
            SteamPlayer = Player.channel.owner;

            var steamPlayerIdId = SteamPlayer.playerID;

            SteamId     = steamPlayerIdId.steamID;
            DisplayName = SteamPlayer.playerID.characterName;

            Session = new UnturnedUserSession(this, pending?.Session);
        }
示例#5
0
        protected internal UnturnedUser(
            UnturnedUserProvider userProvider,
            IUserDataStore userDataStore,
            Player player,
            UnturnedPendingUser pending = null) : base(userProvider, userDataStore)
        {
            var steamPlayerIdId = player.channel.owner.playerID;

            SteamId     = steamPlayerIdId.steamID;
            Player      = new UnturnedPlayer(player);
            DisplayName = player.channel.owner.playerID.characterName;
            Type        = KnownActorTypes.Player;
            Session     = new UnturnedUserSession(this, pending?.Session);
        }
示例#6
0
        public UnturnedUser(Player player, UnturnedPendingUser pending)
        {
            Player      = player;
            SteamPlayer = Player.channel.owner;

            var steamPlayerIdId = SteamPlayer.playerID;

            SteamId     = steamPlayerIdId.steamID;
            DisplayName = SteamPlayer.playerID.characterName;

            SessionData      = pending.SessionData;
            PersistentData   = pending.PersistentData;
            SessionStartTime = pending.SessionStartTime;
        }
示例#7
0
        protected virtual void OnPendingPlayerConnected(ValidateAuthTicketResponse_t callback, ref bool isvalid, ref string explanation)
        {
            var isvalid_     = isvalid;
            var explanation_ = explanation;

            AsyncHelper.RunSync(async() =>
            {
                if (!isvalid_)
                {
                    return;
                }

                var steamPending = Provider.pending.First(d => d.playerID.steamID == callback.m_SteamID);
                var pendingUser  = new UnturnedPendingUser(steamPending);
                await m_DataSeeder.SeedUserDataAsync(pendingUser.Id, pendingUser.Type, pendingUser.DisplayName);

                var userData             = await m_UserDataStore.GetUserDataAsync(pendingUser.Type, pendingUser.Id);
                userData.LastSeen        = DateTime.Now;
                userData.LastDisplayName = pendingUser.DisplayName;
                await m_UserDataStore.SaveUserDataAsync(userData);

                pendingUser.PersistentData = userData.Data;
                m_PendingUsers.Add(pendingUser);

                var userConnectingEvent = new UserConnectingEvent(pendingUser);
                await m_EventBus.EmitAsync(m_Runtime, this, userConnectingEvent);

                if (!string.IsNullOrEmpty(userConnectingEvent.RejectionReason))
                {
                    isvalid_     = false;
                    explanation_ = userConnectingEvent.RejectionReason;
                }

                if (userConnectingEvent.IsCancelled)
                {
                    isvalid_ = false;
                }
            });

            isvalid     = isvalid_;
            explanation = explanation_;
        }
示例#8
0
 public bool Equals(UnturnedPendingUser other)
 {
     return(other?.Equals(this) ?? false);
 }
示例#9
0
 public UnturnedPendingUserSession(UnturnedPendingUser user)
 {
     User             = user;
     SessionStartTime = DateTime.Now;
     SessionData      = new Dictionary <string, object>();
 }
示例#10
0
 protected virtual void FinishSession(UnturnedPendingUser pending)
 {
     pending.SessionEndTime = DateTime.Now;
     m_PendingUsers.Remove(pending);
 }
示例#11
0
        protected virtual void OnPendingPlayerConnecting(ValidateAuthTicketResponse_t callback, ref bool isValid,
                                                         ref string?explanation)
        {
            var user = GetUser(callback.m_SteamID);

            if (user != null || m_PendingUsers.Any(d => d.SteamId == callback.m_SteamID))
            {
                return;
            }

            var steamPending = Provider.pending.FirstOrDefault(d => d.playerID.steamID == callback.m_SteamID);

            if (steamPending == null)
            {
                return;
            }

            var pendingUser = new UnturnedPendingUser(this, m_UserDataStore, steamPending);

            m_PendingUsers.Add(pendingUser);

            var isPendingValid    = isValid;
            var rejectExplanation = explanation;

            AsyncHelper.RunSync(async() =>
            {
                UnturnedUserConnectingEvent userEvent;

                var userData = await m_UserDataStore.GetUserDataAsync(pendingUser.Id, pendingUser.Type);
                if (userData != null)
                {
                    userEvent = new UnturnedUserConnectingEvent(pendingUser);

                    userData.LastSeen        = DateTime.Now;
                    userData.LastDisplayName = pendingUser.DisplayName;
                    UniTask.RunOnThreadPool(() => m_UserDataStore.SetUserDataAsync(userData)).Forget();
                }
                else
                {
                    userEvent = new UnturnedUserFirstConnectingEvent(pendingUser);
                    UniTask.RunOnThreadPool(() => m_DataSeeder.SeedUserDataAsync(pendingUser.Id, pendingUser.Type, pendingUser.DisplayName)).Forget();
                }

                userEvent.IsCancelled = !isPendingValid;
                if (rejectExplanation != null)
                {
                    await userEvent.RejectAsync(rejectExplanation);
                }

                await m_EventBus.EmitAsync(m_Runtime, this, userEvent);
                if (!string.IsNullOrEmpty(userEvent.RejectionReason))
                {
                    isPendingValid    = false;
                    rejectExplanation = userEvent.RejectionReason;
                }
                else if (userEvent.IsCancelled)
                {
                    isPendingValid = false;
                }
            });
            isValid     = isPendingValid;
            explanation = rejectExplanation;
        }