public UdpUnicaster Create(UdpClientRemoteInfo remoteInfo) { return new UdpUnicaster(identity, udpClient, acknowledgementCoordinator, sendReceiveBufferPool, remoteInfo, resendsCounter, resendsAggregator, outboundMessageRateLimitAggregator, sendQueueDepthAggregator); }
private void HandleAnnouncement(UdpClientRemoteInfo remoteInfo, AnnouncementDto x) { announcementsReceivedCounter.Increment(); var peerIdentity = x.Identity; var peerId = peerIdentity.Id; bool isNewlyDiscoveredRoute = false; RoutingContext addedRoutingContext = null; UdpUnicaster addedUnicaster = null; var routingContext = routingContextsByPeerId.GetOrAdd( peerId, add => { isNewlyDiscoveredRoute = true; var unicastReceivePort = int.Parse((string)x.Identity.Properties[UdpConstants.kUnicastPortIdentityPropertyKey]); var unicastIpAddress = remoteInfo.IPEndpoint.Address; var unicastEndpoint = new IPEndPoint(unicastIpAddress, unicastReceivePort); var unicastRemoteInfo = new UdpClientRemoteInfo { Socket = remoteInfo.Socket, IPEndpoint = unicastEndpoint }; addedUnicaster = udpUnicasterFactory.Create(unicastRemoteInfo); return addedRoutingContext = new RoutingContext(addedUnicaster); }); if (addedRoutingContext == routingContext) { addedUnicaster.Initialize(); } if (isNewlyDiscoveredRoute) { routingTable.Register(peerId, routingContext); } peerTable.GetOrAdd(peerId).HandleInboundPeerIdentityUpdate(peerIdentity); }