Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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;
 }
Exemplo n.º 9
0
 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 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;
      }
        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);
        }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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));
        }