예제 #1
0
        public void FillInNetworkNodeId_Test()
        {
            var target = new ClusterMessage();

            target.Header.PayloadType = MessagePayloadType.Object;
            target.PayloadObject      = new NodeStatus();
            target.FillInNetworkNodeId("ABC");
            var ns = (NodeStatus)target.PayloadObject;

            ns.NetworkNodeId.Should().Be("ABC");
        }
예제 #2
0
        public void Send(ClusterMessage envelope)
        {
            envelope.Header.FromNetworkId = _uuid.ToString();
            envelope.Header.FromNodeId    = _core.NodeId;
            if (envelope.Header.FromType == TargetType.Node)
            {
                envelope.Header.FromEntityId = _core.NodeId;
            }
            if (!envelope.IsSendable())
            {
                return;
            }
            envelope.FillInNetworkNodeId(envelope.Header.FromNetworkId);

            var message = _mapper.Map(envelope);

            // If we have a proxy node ID, send the message there and let the proxy sort out
            // further actions.
            // Otherwise a zone type becomes a Shout and a Node type becomes a Whisper
            if (!string.IsNullOrEmpty(envelope.Header.ProxyNodeNetworkId))
            {
                Guid uuid;
                bool ok = Guid.TryParse(envelope.Header.ProxyNodeNetworkId, out uuid);
                if (ok)
                {
                    _zyre.Whisper(uuid, message);
                }
            }
            else if (envelope.Header.ToType == TargetType.Cluster)
            {
                _zyre.Shout(Zones.ZoneAll, message);
            }
            else if (envelope.Header.ToType == TargetType.Zone)
            {
                _zyre.Shout(envelope.Header.ZoneName, message);
            }
            else if (envelope.Header.ToType == TargetType.Node)
            {
                _zyre.Whisper(envelope.Header.GetToNetworkUuid(), message);
            }
        }