Beispiel #1
0
        /// <summary>
        /// Removes the Peer from this Scope and adds them to the specified targetScope.
        /// </summary>
        /// <param name="peer">The Peer.</param>
        /// <param name="targetScope">The Scope to handover the Peer to.</param>
        public void HandoverPeer(TPeer peer, BaseServerScope <TPeer> targetScope)
        {
            // tell the peer about this handover
            ScopeUtils.SendScopeSwitchedMessage(this, targetScope, peer);

            // remove peer from this scope
            RemovePeer(peer, false);

            // add peer to target scope
            targetScope.AddPeer(peer, false);
        }
        public static void SendScopeExitedMessage <TPeer>(BaseServerScope <TPeer> scope, NetworkConnection connection) where TPeer : NetworkPeer
        {
            NetworkWriter writer = new NetworkWriter();

            writer.StartMessage(ScopeMsgType.ExitScope);

            // 1. msgType: Determines which channel to communicate on
            writer.Write(scope.msgType);

            writer.FinishMessage();

            SendNetworkWriter(writer, connection);
        }
        public static void SendScopeEnteredMessage <TPeer>(BaseServerScope <TPeer> scope, NetworkConnection connection) where TPeer : NetworkPeer
        {
            NetworkWriter writer = new NetworkWriter();

            writer.StartMessage(ScopeMsgType.EnterScope);

            // 1. scopeIdentifier: The value which identifier the counterpart client class
            writer.Write(scope.msgType);

            // 2. msgType: Determines which channel to communicate on
            writer.Write(scope.scopeIdentifier);

            writer.FinishMessage();

            SendNetworkWriter(writer, connection);
        }
        public static void SendScopeSwitchedMessage <TPeer>(BaseServerScope <TPeer> prevScope, BaseServerScope <TPeer> newScope, NetworkConnection connection) where TPeer : NetworkPeer
        {
            NetworkWriter writer = new NetworkWriter();

            writer.StartMessage(ScopeMsgType.SwitchScope);

            // 1. msgType: Send prev scope channel
            writer.Write(prevScope.msgType);

            // 2. msgType: Send new scope channel
            writer.Write(newScope.msgType);

            // 2. scopeIdentifier: The value which identifier the counterpart (new) client scope
            writer.Write(newScope.scopeIdentifier);

            writer.FinishMessage();

            SendNetworkWriter(writer, connection);
        }
        public void UnregisterScope(BaseServerScope <TPeer> scope)
        {
            // don't allow unregistering default scope
            if (defaultScope == scope)
            {
                throw new Exception("Failed to unregister Scope because it is the default Scope");
            }

            // remove from registered scopes
            if (registeredScopes.Remove(scope))
            {
                // make sure to clean-up before letting go of this scope
                scope.Dispose();
            }
            else
            {
                Debug.LogWarningFormat("Failed to remove the Scope {0} because it was not registered with the MasterServer.", scope.GetType());
            }
        }
        public TServerScope RegisterScope <TServerScope>(byte scopeIdentifier, bool setAsDefault) where TServerScope : BaseServerScope <TPeer>, new()
        {
            TServerScope scope = new TServerScope();

            scope.SetAutomaticMsgType(scopeIdentifier, msgTypeGenerator);

            // initialize the scope with the MasterServer instance
            scope.Initialize(this);

            registeredScopes.Add(scope);

            // set as default scope for newly connected players if specified
            if (setAsDefault)
            {
                defaultScope = scope;
            }

            return(scope);
        }