public TestTransport(TestTransportFactory testTransportFactory, Identity identity, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher) { this.testTransportFactory = testTransportFactory; this.identity = identity; this.routingTable = routingTable; this.peerTable = peerTable; this.inboundMessageDispatcher = inboundMessageDispatcher; }
public TcpTransport(TcpTransportConfiguration configuration, Identity identity, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher, TcpRoutingContextContainer tcpRoutingContextContainer, PayloadUtils payloadUtils) { this.configuration = configuration; this.identity = identity; this.routingTable = routingTable; this.peerTable = peerTable; this.inboundMessageDispatcher = inboundMessageDispatcher; this.tcpRoutingContextContainer = tcpRoutingContextContainer; this.payloadUtils = payloadUtils; }
public Task<ITransport> CreateAsync(MobOperations mobOperations, Identity identity, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher, AuditService auditService) { var inboundBytesAggregator = auditService.GetAggregator<double>(DataSetNames.kInboundBytes); var outboundBytesAggregator = auditService.GetAggregator<double>(DataSetNames.kOutboundBytes); var tcpRoutingContextContainer = new TcpRoutingContextContainer(); var payloadUtils = new PayloadUtils(inboundBytesAggregator, outboundBytesAggregator); var transport = new TcpTransport(configuration, identity, routingTable, peerTable, inboundMessageDispatcher, tcpRoutingContextContainer, payloadUtils); transport.Initialize(); mobOperations.RegisterMob(new TcpDebugMob(tcpRoutingContextContainer)); return Task.FromResult<ITransport>(transport); }
public TcpRoutingContext(TcpTransportConfiguration configuration, TcpRoutingContextContainer tcpRoutingContextContainer, Socket client, InboundMessageDispatcher inboundMessageDispatcher, Identity localIdentity, RoutingTable routingTable, PeerTable peerTable, PayloadUtils payloadUtils) { logger.Debug($"Constructing TcpRoutingContext for client {client.RemoteEndPoint}, localId: {localIdentity}"); this.configuration = configuration; this.tcpRoutingContextContainer = tcpRoutingContextContainer; this.client = client; this.inboundMessageDispatcher = inboundMessageDispatcher; this.localIdentity = localIdentity; this.routingTable = routingTable; this.peerTable = peerTable; this.payloadUtils = payloadUtils; this.ns = new NetworkStream(client); }
public UdpDispatcherImpl(Identity identity, UdpClient udpClient, DuplicateFilter duplicateFilter, PayloadSender payloadSender, AcknowledgementCoordinator acknowledgementCoordinator, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher, MultiPartPacketReassembler multiPartPacketReassembler, IUdpUnicasterFactory udpUnicasterFactory, IAuditCounter announcementsReceivedCounter, IAuditCounter tossedCounter, IAuditCounter duplicateReceivesCounter, IAuditAggregator<int> multiPartChunksBytesReceivedAggregator) { this.identity = identity; this.udpClient = udpClient; this.duplicateFilter = duplicateFilter; this.payloadSender = payloadSender; this.acknowledgementCoordinator = acknowledgementCoordinator; this.routingTable = routingTable; this.peerTable = peerTable; this.inboundMessageDispatcher = inboundMessageDispatcher; this.multiPartPacketReassembler = multiPartPacketReassembler; this.udpUnicasterFactory = udpUnicasterFactory; this.announcementsReceivedCounter = announcementsReceivedCounter; this.tossedCounter = tossedCounter; this.duplicateReceivesCounter = duplicateReceivesCounter; this.multiPartChunksBytesReceivedAggregator = multiPartChunksBytesReceivedAggregator; }
public async Task<ITransport> CreateAsync(MobOperations mobOperations, Identity identity, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher, AuditService auditService) { var transport = new TestTransport(this, identity, routingTable, peerTable, inboundMessageDispatcher); transports.Add(transport); // transport discovers existing test transports, they discover transport foreach (var otherTransport in transports) { if (otherTransport == transport) continue; var otherTransportNewTransportRoutingContext = new TestRoutingContext(this, identity); otherTransport.SetupRoutingContext(otherTransportNewTransportRoutingContext); otherTransport.PeerTable.GetOrAdd(identity.Id).HandleInboundPeerIdentityUpdate(identity); var newTransportOtherTransportRoutingContext = new TestRoutingContext(this, otherTransport.Identity); transport.SetupRoutingContext(newTransportOtherTransportRoutingContext); transport.PeerTable.GetOrAdd(otherTransport.Identity.Id).HandleInboundPeerIdentityUpdate(otherTransport.Identity); } return transport; }
public Task<ITransport> CreateAsync(MobOperations mobOperations, Identity identity, RoutingTable routingTable, PeerTable peerTable, InboundMessageDispatcher inboundMessageDispatcher, AuditService auditService) { // setup identity identity.Properties[UdpConstants.kUnicastPortIdentityPropertyKey] = configuration.UnicastReceiveEndpoint.Port.ToString(); var duplicateFilter = new DuplicateFilter(); duplicateFilter.Initialize(); var inboundBytesAggregator = auditService.GetAggregator<double>(DataSetNames.kInboundBytes); var outboundBytesAggregator = auditService.GetAggregator<double>(DataSetNames.kOutboundBytes); var inboundReceiveProcessDispatchLatencyAggregator = auditService.GetAggregator<double>(DataSetNames.kInboundProcessDispatchLatency); var resendsCounter = auditService.GetCounter(DataSetNames.kTotalResends); var resendsAggregator = auditService.GetAggregator<int>(DataSetNames.kMessageResends); var tossedCounter = auditService.GetCounter(DataSetNames.kTossed); var duplicatesReceivedCounter = auditService.GetCounter(DataSetNames.kDuplicatesReceived); var announcementsReceivedCounter = auditService.GetCounter(DataSetNames.kAnnouncementsReceived); var multiPartChunksSentCounter = auditService.GetCounter(DataSetNames.kMultiPartChunksSent); var multiPartChunksReceivedAggregator = auditService.GetAggregator<int>(DataSetNames.kMultiPartChunksBytesReceived); var outboundMessageRateLimitAggregator = auditService.GetAggregator<double>(DataSetNames.kOutboundMessageRateLimit); var sendQueueDepthAggregator = auditService.GetAggregator<double>(DataSetNames.kSendQueueDepth); mobOperations.RegisterMob(new UdpDebugMob()); var shutdownCts = new CancellationTokenSource(); var acknowledgementCoordinator = new AcknowledgementCoordinator(identity); var udpUnicastScheduler = SchedulerFactory.CreateWithCustomThreadPool($"Courier.Udp({identity.Id.ToShortString()}).Unicast"); var sendReceiveBufferPool = ObjectPool.CreateStackBacked(() => new byte[UdpConstants.kMaximumTransportSize]); var client = UdpClient.Create(configuration, udpUnicastScheduler, sendReceiveBufferPool, inboundBytesAggregator, outboundBytesAggregator, inboundReceiveProcessDispatchLatencyAggregator); var payloadSender = new PayloadSender(client); var multiPartPacketReassembler = new MultiPartPacketReassembler(); var udpUnicasterFactory = new UdpUnicasterFactory(identity, client, acknowledgementCoordinator, sendReceiveBufferPool, resendsCounter, resendsAggregator, outboundMessageRateLimitAggregator, sendQueueDepthAggregator); var udpDispatcher = new UdpDispatcherImpl(identity, client, duplicateFilter, payloadSender, acknowledgementCoordinator, routingTable, peerTable, inboundMessageDispatcher, multiPartPacketReassembler, udpUnicasterFactory, announcementsReceivedCounter, tossedCounter, duplicatesReceivedCounter, multiPartChunksReceivedAggregator); multiPartPacketReassembler.SetUdpDispatcher(udpDispatcher); var announcer = new Announcer(identity, payloadSender, shutdownCts.Token); announcer.Initialize(); var udpFacade = new UdpFacade(client, udpDispatcher, shutdownCts); var udpBroadcaster = new UdpBroadcaster(identity, client); var transport = new UdpTransport(udpBroadcaster, udpFacade); client.StartReceiving(udpDispatcher); return Task.FromResult<ITransport>(transport); }
public DebugMob(RoutingTable routingTable, PeerTable peerTable) { this.routingTable = routingTable; this.peerTable = peerTable; }
public async Task<IRyuContainer> CreateAsync(IReadOnlySet<ITransportFactory> transportFactories, Guid? forceId = null) { var container = root.CreateChildContainer(); var proxyGenerator = container.GetOrDefault<ProxyGenerator>() ?? new ProxyGenerator(); var shutdownCancellationTokenSource = new CancellationTokenSource(); // Auditing Subsystem var auditService = new AuditService(shutdownCancellationTokenSource.Token); auditService.Initialize(); // management tier containers var mobContextContainer = new MobContextContainer(); var mobContextFactory = new MobContextFactory(auditService); var mobOperations = new MobOperations(mobContextFactory, mobContextContainer); // Other Courier Stuff var identity = Identity.Create(forceId); var routingTable = new RoutingTable(); var peerDiscoveryEventBus = new AsyncBus<PeerDiscoveryEvent>(); var peerTable = new PeerTable(container, (table, peerId) => new PeerContext(table, peerId, peerDiscoveryEventBus)); var inboundMessageRouter = new InboundMessageRouter(); var inboundMessageDispatcher = new InboundMessageDispatcher(identity, peerTable, inboundMessageRouter); var transports = new ConcurrentSet<ITransport>(); foreach (var transportFactory in transportFactories) { var transport = await transportFactory.CreateAsync(mobOperations, identity, routingTable, peerTable, inboundMessageDispatcher, auditService).ConfigureAwait(false); transports.TryAdd(transport); } var messenger = new Messenger(identity, transports, routingTable); container.Set(identity); container.Set(routingTable); container.Set(peerTable); container.Set(inboundMessageRouter); container.Set(messenger); //---------------------------------------------------------------------------------------- // Service Tier - Service Discovery, Remote Method Invocation //---------------------------------------------------------------------------------------- var localServiceRegistry = new LocalServiceRegistry(identity, messenger); var remoteServiceInvoker = new RemoteServiceInvoker(identity, messenger); var remoteServiceProxyContainer = new RemoteServiceProxyContainer(proxyGenerator, remoteServiceInvoker); inboundMessageRouter.RegisterHandler<RmiRequestDto>(localServiceRegistry.HandleInvocationRequestAsync); inboundMessageRouter.RegisterHandler<RmiResponseDto>(remoteServiceInvoker.HandleInvocationResponse); container.Set(localServiceRegistry); container.Set(remoteServiceProxyContainer); //---------------------------------------------------------------------------------------- // Management Tier - DMI - Services //---------------------------------------------------------------------------------------- var managementObjectService = new ManagementObjectService(mobContextContainer, mobOperations); localServiceRegistry.RegisterService<IManagementObjectService>(managementObjectService); container.Set(mobOperations); container.Set(managementObjectService); var facade = new CourierFacade(transports, container); container.Set(facade); return container; }