예제 #1
0
        public void ReceiveServerAction(PropagateToken token)
        {
            if (checkDiscovery(token))
            {
                return;
            }

            logger.Debug("Token {0} received for action {1}", token.GetUID(), token.Action.ToString());
            if (token.HasHopedOnObject(this))
            {
                logger.Debug("Token {0} already processed, discarding", token.GetUID());
                return;
            }


            object[] pars;
            switch (token.Action)
            {
            case PropagateAction.AddServer:
                AddZoneServer((IServerExtended)token.Data, token);
                break;

            case PropagateAction.RemoveServer:
                RemoveZoneServer((string)token.Data, token);
                break;

            case PropagateAction.Register:
                pars = (object[])token.Data;
                Register((string[])pars[0], (IStockManager)pars[1], token);
                break;

            case PropagateAction.Unregister:
                Unregister((IStockManager)token.Data, token);
                break;
            }
        }
예제 #2
0
        private bool checkDiscovery(PropagateToken token)
        {
            if (discoveryComplete)
            {
                return(false);
            }

            lock (knownServers)
            {
                if (!discoveryComplete && (discoverToken.GetUID() == token.GetUID()))
                {
                    discoveryComplete = true;
                    logger.Info("Received discovery token. Server is on the ring.");
                    return(true);
                }
            }

            return(false);
        }