Example #1
0
 public Authorize(Core.Networking.ErrorCodes ErrorCode)
     : base((ushort)Core.Networking.PacketList.ServerAuthentication, Core.Networking.Constants.xOrKeyInternalSend)
 {
     Append((ushort)ErrorCode);
 }
Example #2
0
 public PlayerAuthentication(Core.Networking.ErrorCodes errorCode, uint targetId)
     : base((ushort)Core.Networking.PacketList.PlayerAuthentication, Core.Networking.Constants.xOrKeyInternalSend)
 {
     Append((ushort)errorCode);
     Append(targetId);
 }
        protected override void Process(Entities.Server s)
        {
            ushort errorCode = GetUShort(0);

            if (Enum.IsDefined(typeof(Core.Networking.ErrorCodes), errorCode))
            {
                Core.Networking.ErrorCodes enumErrorCode = (Core.Networking.ErrorCodes)errorCode;
                uint   targetId    = GetuInt(1);
                string username    = GetString(3);
                byte   accessLevel = GetByte(4);
                switch (enumErrorCode)
                {
                // A new player logs in.
                //Raptor 1/6/18: Added more checks just in case someone managed to perform a MiM while another player is choosing server.
                //That would lead to a registered, not active session which could be stolen if targetId is known

                case Core.Networking.ErrorCodes.Success:
                {
                    Session session = Managers.SessionManager.Instance.Get(targetId);
                    if (session != null)
                    {
                        if (!session.IsActivated && session.Name == username && (byte)session.AccessLevel == accessLevel)
                        {
                            session.Activate((byte)s.ID);
                            s.Send(new Packets.Internal.PlayerAuthentication(session));
                        }
                        else
                        {
                            s.Send(new Packets.Internal.PlayerAuthentication(Core.Networking.ErrorCodes.EntityAlreadyAuthorized, targetId));
                        }
                    }
                    else
                    {
                        s.Send(new Packets.Internal.PlayerAuthentication(Core.Networking.ErrorCodes.InvalidKeyOrSession, targetId));
                    }

                    break;
                }

                // Update the information of a player.
                //TODO: DARK INVESTIGATE THIS
                case Core.Networking.ErrorCodes.Update:
                {
                    Session session = Managers.SessionManager.Instance.Get(targetId);
                    if (session != null)
                    {
                    }
                    else
                    {
                        // Force a closure of the connection.
                        s.Send(new Packets.Internal.PlayerAuthentication(Core.Networking.ErrorCodes.InvalidKeyOrSession, targetId));
                    }

                    break;
                }

                // A player logs out of the server.
                case Core.Networking.ErrorCodes.EndConnection:
                {
                    Session session = Managers.SessionManager.Instance.Get(targetId);
                    if (session != null)
                    {
                        if (session.IsActivated)
                        {
                            session.End();
                        }
                    }
                    break;
                }

                default:
                {
                    // Unused.
                    break;
                }
                }
            }
            else
            {
                Console.WriteLine(string.Concat("Unknown PlayerAuthorization error: ", errorCode));
            }
        }