Esempio n. 1
0
 /// <inheritdoc/>
 public void Unicast(IPEndPoint endPoint, DistributedMessage distributedMessage)
 {
     if (Equals(masterPeer.PeerEndPoint, endPoint))
     {
         masterPeer.Send(distributedMessage);
     }
     distributedMessage.Release();
 }
Esempio n. 2
0
 /// <inheritdoc/>
 public void Broadcast(DistributedMessage distributedMessage)
 {
     foreach (var peer in peers)
     {
         peer.Value.Send(distributedMessage);
     }
     distributedMessage.Release();
 }
Esempio n. 3
0
        /// <summary>
        /// Method handling incoming message to this receiver
        /// </summary>
        /// <param name="distributedMessage">Received message</param>
        private void MessageReceived(DistributedMessage distributedMessage)
        {
            var sender = distributedMessage.Sender;

            //Check if peer is still connected
            if (sender == null)
            {
                return;
            }
            TimeManager.PopTimeDifference(distributedMessage, sender.RemoteTimeTicksDifference);
            var id = idsRegister.PopId(distributedMessage.Content);
            var identifiedObject = idsRegister.ResolveObject(id);

            if (identifiedObject is IMessageReceiver receiver)
            {
                //Forward message to proper receiver
                distributedMessage.AddressKey = identifiedObject.Key;
                receiver.ReceiveMessage(sender, distributedMessage);
                distributedMessage.Release();
            }
            else
            {
                //Check if it is initialization message for IdsRegister - first sent message
                if (idsRegister.IsInitializationMessage(sender, distributedMessage))
                {
                    // distributedMessage.Release();
                    return;
                }

                //Ignore messages with outdated assigned identifiers
                if (distributedMessage.Timestamp < idsRegister.InternalIdBindUtcTime)
                {
                    return;
                }

                //Hold message until proper receiver registers
                if (!awaitingIncomingMessages.TryGetValue(id, out var messages))
                {
                    messages = new List <AwaitingMessage>();
                    awaitingIncomingMessages.Add(id, messages);
                }

                var awaitingMessage = new AwaitingMessage()
                {
                    EndPoint           = sender.PeerEndPoint,
                    DistributedMessage = distributedMessage
                };
                messages.Add(awaitingMessage);
            }
        }
Esempio n. 4
0
        /// <inheritdoc/>
        public void Broadcast(DistributedMessage distributedMessage)
        {
            var bytesStack = distributedMessage.Content;

            try
            {
                NetworkStatistics.ReportSentPackage(bytesStack.Count);
                NetClient.SendToAll(bytesStack.RawData, 0, bytesStack.Count,
                                    LiteNetLibPeerManager.GetDeliveryMethod(distributedMessage.Type));
            }
            catch (TooBigPacketException)
            {
                Log.Error($"Too large message to be sent: {bytesStack.Count}.");
            }

            distributedMessage.Release();
        }
Esempio n. 5
0
 /// <inheritdoc/>
 public void Broadcast(DistributedMessage distributedMessage)
 {
     masterPeer?.Send(distributedMessage);
     distributedMessage.Release();
 }
 /// <inheritdoc/>
 public void Unicast(IPEndPoint endPoint, DistributedMessage distributedMessage)
 {
     peers[endPoint].Send(distributedMessage);
     distributedMessage.Release();
 }