private static void SendActorRegistrationMessage(ISocket socket, byte[] identity, IEnumerable<MessageIdentifier> registrations) { var payload = new RegisterInternalMessageRouteMessage { SocketIdentity = identity, MessageContracts = registrations .Select(mh => new MessageContract { Identity = mh.Identity, Version = mh.Version }) .ToArray() }; socket.SendMessage(Message.Create(payload, RegisterInternalMessageRouteMessage.MessageIdentity)); }
private IEnumerable<MessageIdentifier> UpdateLocalRoutingTable(RegisterInternalMessageRouteMessage payload, SocketIdentifier socketIdentifier) { var handlers = new List<MessageIdentifier>(); foreach (var registration in payload.MessageContracts) { try { var messageIdentifier = new MessageIdentifier(registration.Version, registration.Identity); internalRoutingTable.AddMessageRoute(messageIdentifier, socketIdentifier); handlers.Add(messageIdentifier); } catch (Exception err) { logger.Error(err); } } return handlers; }
public void TestStartingActorHost_SendsActorRegistrationMessage() { var actorHost = new ActorHost(socketFactory.Object, actorHandlersMap, new AsyncQueue<AsyncMessageContext>(), new AsyncQueue<IActor>(), routerConfiguration, messageTracer.Object, logger); actorHost.AssignActor(new EchoActor()); try { StartActorHost(actorHost); var routableSocket = actorHostSocketFactory.GetRoutableSocket(); var registration = actorHostSocketFactory .GetRegistrationSocket() .GetSentMessages() .BlockingLast(AsyncOpCompletionDelay); Assert.IsNotNull(registration); var payload = new RegisterInternalMessageRouteMessage { SocketIdentity = routableSocket.GetIdentity(), MessageContracts = actorHandlersMap .GetMessageHandlerIdentifiers() .Select(mh => new MessageContract { Identity = mh.Identity, Version = mh.Version }) .ToArray() }; var regMessage = Message.Create(payload, RegisterInternalMessageRouteMessage.MessageIdentity); CollectionAssert.AreEqual(registration.Body, regMessage.Body); } finally { actorHost.Stop(); } }