/// <inheritdoc/> public void Unicast(IPEndPoint endPoint, DistributedMessage distributedMessage) { if (Equals(masterPeer.PeerEndPoint, endPoint)) { masterPeer.Send(distributedMessage); } distributedMessage.Release(); }
/// <inheritdoc/> public void Broadcast(DistributedMessage distributedMessage) { foreach (var peer in peers) { peer.Value.Send(distributedMessage); } distributedMessage.Release(); }
/// <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); } }
/// <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(); }
/// <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(); }