public void WhenAddPeerMessageArrives_PeerIsAddedToConnectedPeerRegistry() { var peerIdentifier = new ReceiverIdentifier(Guid.NewGuid().ToByteArray()); var payload = new AddPeerMessage { SocketIdentity = peerIdentifier.Identity, Uri = "tcp://127.0.0.1:8080", Health = new global::kino.Messaging.Messages.Health { Uri = "tcp://127.0.0.2:9090", HeartBeatInterval = TimeSpan.FromSeconds(10) } }; var message = Message.Create(payload); subscriberSocket.SetupMessageReceived(message, tokenSource.Token); // clusterHealthMonitor.Start(); AsyncOp.Sleep(); tokenSource.Cancel(); clusterHealthMonitor.Stop(); // Func <ClusterMemberMeta, bool> isPeerMetadata = meta => payload.Health.Uri == meta.HealthUri && payload.Health.HeartBeatInterval == meta.HeartBeatInterval && payload.Uri == meta.ScaleOutUri; connectedPeerRegistry.Verify(m => m.FindOrAdd(peerIdentifier, It.Is <ClusterMemberMeta>(meta => isPeerMetadata(meta))), Times.Once); }
public void Consume(IConsumeContext <AddPeer> context) { // made a new friend, let's introduce ourselves, but may need to send // an addclient first, which would loop forever, so how do we only send // to people we just met? Observe a PeerAdded event? ;) OnPeerAdded/OnPeerRemoved if (_peerUri.Equals(context.SourceAddress)) { return; } if (context.ResponseAddress == null) { return; } List <SubscriptionInformation> subscriptions = _router.LocalSubscriptions .Select(x => new SubscriptionInformation(_peerId, x.SubscriptionId, x.MessageName, x.CorrelationId, x.EndpointUri)) .ToList(); if (_log.IsInfoEnabled) { _log.InfoFormat("Sending {0} subscriptions to {1} from {2}", subscriptions.Count, context.SourceAddress, _peerUri); } IEndpoint clientEndpoint = _subscriptionBus.GetEndpoint(context.ResponseAddress); var addPeer = new AddPeerMessage { PeerId = _peerId, PeerUri = _peerUri, Timestamp = _producer.Timestamp, }; clientEndpoint.Send(addPeer, sendContext => { sendContext.SetNetwork(_network); sendContext.SetSourceAddress(_peerUri); }); subscriptions.Each(x => { var add = new AddPeerSubscriptionMessage { PeerId = _peerId, MessageNumber = 0, SubscriptionId = x.SubscriptionId, EndpointUri = x.EndpointUri, MessageName = x.MessageName, CorrelationId = x.CorrelationId, }; clientEndpoint.Send(add, sendContext => { sendContext.SetNetwork(_network); sendContext.SetSourceAddress(_peerUri); }); }); }
public IActionResult AddPeer([FromBody] AddPeerMessage messageInJson) { _logger.LogDebug("[POST] peer/add"); _logger.LogTrace("@RequestBody:\n<message>\n{}\n</message>", messageInJson); if (!messageInJson.IsMessageValid()) { return(BadRequest("Message is not valid")); } var success = _peerToPeerService.AddPeer(messageInJson.peerAddress); if (success) { return(Accepted("Added peer")); } else { return(BadRequest("Unable to connect to a peer.")); } }