コード例 #1
0
        /// <summary>
        /// Gets called when the parent server wishes to handoff a player off
        /// </summary>
        /// <param name="msg">request details</param>
        private void OnPlayerHandoffRequest(INetworkConnection con, Packet pck)
        {
            PacketRelayPlayerHandoffRequest msg = pck as PacketRelayPlayerHandoffRequest;

            // Create an auth ticket for the player, if we want to allow them to connect.

            ServerUser su = new ServerUser();

            su.OwningServer = msg.OwningServer;
            su.AuthTicket   = Guid.Empty;
            su.ID           = msg.Player;
            su.AccountName  = msg.AccountName;
            su.Profile      = msg.Profile;

            if (msg.Character != null)
            {
                msg.Character.OwningAccount        = su;
                su.CurrentCharacter                = msg.Character;
                su.CurrentCharacter.TargetResource = msg.TargetResource;
            }

            string rmsg = "";

            su.AuthTicket = OnPlayerConnectionRequest(su, ref rmsg);

            bool allowed = su.AuthTicket != Guid.Empty;

            if (allowed)
            {
                ConnectionManager.AuthorizeUser(su, false);
                if (msg.Character != null)
                {
                    CharacterCache.CacheCharacter(su.CurrentCharacter, ServerUser.AccountName);
                }
            }

            PacketPlayerAuthorizedForTransfer p = (PacketPlayerAuthorizedForTransfer)CreatePacket((int)ServerPacketType.PacketPlayerAuthorizedForTransfer, 0, true, true);

            p.ReplyCode      = allowed ? ReplyType.OK : ReplyType.Failure;
            p.Profile        = msg.Profile;
            p.AccountName    = msg.AccountName;
            p.AuthTicket     = su.AuthTicket;
            p.ReplyMessage   = allowed ? "Welcome to " + MyServer.ServerName + ", " + msg.AccountName : "Server is currently not accepting logins.  Try again a little later. " + rmsg;
            p.Player         = msg.Player;
            p.TargetResource = msg.TargetResource;

            msg.ReplyPacket = p; // reply will be sent by NetworkConnection.OnAfterPacketProcessed
        }
コード例 #2
0
        /// <summary>
        /// Requests that a player be connected to the cluster server
        /// </summary>
        /// <param name="userId">the id of the account to be transferred</param>
        /// <param name="accountName">the name of the account to be transferred</param>
        /// <param name="remotePlayerEndpoint">the remote endpoint of the transferee</param>
        /// <param name="targetResource">the target content resource the player wants, or Guid.Empy if none</param>
        /// <param name="accountProperties">the account properties of the account to transfer</param>
        /// <param name="owningServer">the server in the cluster that owns the server.  See ServerUser.Owner</param>
        public void RequestPlayerHandoff(Guid userId, string accountName, Guid targetResource, AccountProfile profile, ServerCharacterInfo characterToTransfer, string owningServer)
        {
            // request auth ticket from game server
            PacketRelayPlayerHandoffRequest p = (PacketRelayPlayerHandoffRequest)CreatePacket((int)ServerPacketType.RequestPlayerHandoff, 0, false, false);

            p.NeedsReply     = true;
            p.Player         = userId;
            p.SharedSecret   = Server.SharedClusterServerSecret;
            p.AccountName    = accountName;
            p.TargetResource = targetResource;
            p.Profile        = profile;
            p.OwningServer   = owningServer;
            p.Character      = characterToTransfer;

            Log1.Logger("Server.Outbound.Network").Info("Requesting authenticated client *" + p.AccountName + "* to be handed off to game server " + Name + ".");
            Send(p);
        }