Ejemplo n.º 1
0
        private static LinkedListStack <Node> PrepareMessage(RelayMessage message)
        {
            LinkedListStack <Node> nodes = NodeManager.Instance.GetNodesForMessage(message);

            message.RelayTTL--;
            SetHydrationPolicy(message);

            if (nodes.Count > 0)
            {
                System.Net.IPAddress myAddress = NodeManager.Instance.MyIpAddress;
                if (myAddress != null)
                {
                    message.AddAddressToHistory(myAddress);
                }
            }

            DebugWriter.WriteDebugInfo(message, nodes);
            return(nodes);
        }
Ejemplo n.º 2
0
        private SimpleLinkedList <Node> PrepareMessage(RelayMessage message, bool isRetry)
        {
            if (isRetry)
            {
                message.RelayTTL++;
            }
            SimpleLinkedList <Node> nodes = NodeManager.Instance.GetNodesForMessage(message);

            message.RelayTTL--;
            SetHydrationPolicy(message);

            if (nodes.Count > 0 && !isRetry)
            {
                System.Net.IPAddress myAddress = NodeManager.Instance.MyIpAddress;
                if (myAddress != null)
                {
                    message.AddressHistory.Add(myAddress);
                }
            }
            DebugWriter.WriteDebugInfo(message, nodes);
            return(nodes);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Splits messages into various lists of in and out message destined for different nodes.
        /// </summary>
        /// <param name="messages"></param>
        /// <returns></returns>
        internal NodeWithMessagesCollection DistributeMessages(IList <RelayMessage> messages)
        {
            NodeWithMessagesCollection distribution = new NodeWithMessagesCollection();
            RelayMessage message;
            Node         node;

            for (int i = 0; i < messages.Count; i++)
            {
                if (messages[i] != null)
                {
                    message = messages[i];

                    RelayMessage interZoneMessage = null;

                    SimpleLinkedList <Node> nodesForMessage          = GetNodesForMessage(message);
                    SimpleLinkedList <Node> nodesForInterZoneMessage = null;

                    if (nodesForMessage.Count > 0)
                    {
                        message.AddressHistory.Add(MyIpAddress);
                    }
                    message.RelayTTL--;

                    #region Identify InterZone Messages
                    if (message.IsTwoWayMessage == false)
                    {
                        message.ResultOutcome = RelayOutcome.Queued;                         //will be queued, if sync will not get overwritten

                        // Identify nodes in foreign zones
                        int nodeCount = nodesForMessage.Count;
                        for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
                        {
                            nodesForMessage.Pop(out node);
                            if (_myNodeDefinition != null && _myNodeDefinition.Zone != node.NodeDefinition.Zone)
                            {
                                // Message needs to cross Zone bounderies
                                if (interZoneMessage == null)
                                {
                                    interZoneMessage         = RelayMessage.CreateInterZoneMessageFrom(message);
                                    nodesForInterZoneMessage = new SimpleLinkedList <Node>();
                                }
                                nodesForInterZoneMessage.Push(node);
                            }
                            else
                            {
                                nodesForMessage.Push(node);
                            }
                        }
                    }
                    #endregion

                    if (nodesForMessage.Count > 0)
                    {
                        DebugWriter.WriteDebugInfo(message, nodesForMessage);
                        distribution.Add(message, nodesForMessage);
                    }

                    if (nodesForInterZoneMessage != null && nodesForInterZoneMessage.Count > 0)
                    {
                        DebugWriter.WriteDebugInfo(interZoneMessage, nodesForInterZoneMessage);
                        distribution.Add(interZoneMessage, nodesForInterZoneMessage);
                    }
                }
            }

            return(distribution);
        }