Example #1
0
        public CourierClient CreateUdpCourierClient(int port, CourierClientConfiguration clientConfiguration = null)
        {
            clientConfiguration = clientConfiguration ?? new CourierClientConfiguration();
            InitializeDefaults($"udp({port})", clientConfiguration);

            var endpoint       = new CourierEndpointImpl(pofSerializer, clientConfiguration.Identifier, clientConfiguration.Name);
            var network        = new UdpCourierNetwork(networkingProxy, new UdpCourierNetworkConfiguration(port));
            var networkContext = network.Join(endpoint);

            var networkBroadcaster = new NetworkBroadcasterImpl(endpoint, networkContext, pofSerializer);
            var messageContextPool = objectPoolFactory.CreatePool(() => new UnacknowledgedReliableMessageContext());
            var unacknowledgedReliableMessageContainer = new UnacknowledgedReliableMessageContainer(messageContextPool);
            var messageDtoPool      = objectPoolFactory.CreatePool(() => new CourierMessageV1());
            var messageTransmitter  = new MessageTransmitterImpl(guidProxy, pofSerializer, networkBroadcaster, unacknowledgedReliableMessageContainer, messageDtoPool);
            var messageSender       = new MessageSenderImpl(guidProxy, unacknowledgedReliableMessageContainer, messageTransmitter);
            var acknowledgeDtoPool  = objectPoolFactory.CreatePool(() => new CourierMessageAcknowledgeV1());
            var messageAcknowledger = new MessageAcknowledgerImpl(networkBroadcaster, unacknowledgedReliableMessageContainer, acknowledgeDtoPool);
            var periodicAnnouncer   = new PeriodicAnnouncerImpl(threadingProxy, pofSerializer, endpoint, networkBroadcaster);

            periodicAnnouncer.Start();
            var periodicResender = new PeriodicResenderImpl(threadingProxy, unacknowledgedReliableMessageContainer, messageTransmitter);

            periodicResender.Start();

            ReceivedMessageFactory receivedMessageFactory = new ReceivedMessageFactoryImpl(pofSerializer);
            MessageRouter          messageRouter          = new MessageRouterImpl();
            var peerRegistry    = new PeerRegistryImpl(pofSerializer);
            var networkReceiver = new NetworkReceiverImpl(endpoint, networkContext, pofSerializer, messageRouter, messageAcknowledger, peerRegistry, receivedMessageFactory);

            networkReceiver.Initialize();

            return(new CourierClientFacadeImpl(endpoint, messageSender, messageRouter, peerRegistry));
        }
        private static void Main(string[] args)
        {
            //var network = new LocalCourierNetwork(dropRate: 0.1);
            IDnsProxy                  dnsProxy                  = new DnsProxy();
            var                        tcpEndPointFactory        = new TcpEndPointFactory(dnsProxy);
            IThreadingFactory          threadingFactory          = new ThreadingFactory();
            ISynchronizationFactory    synchronizationFactory    = new SynchronizationFactory();
            IThreadingProxy            threadingProxy            = new ThreadingProxy(threadingFactory, synchronizationFactory);
            IStreamFactory             streamFactory             = new StreamFactory();
            INetworkingInternalFactory networkingInternalFactory = new NetworkingInternalFactory(threadingProxy, streamFactory);
            ISocketFactory             socketFactory             = new SocketFactory(tcpEndPointFactory, networkingInternalFactory);
            INetworkingProxy           networkingProxy           = new NetworkingProxy(socketFactory, tcpEndPointFactory);
            var                        network = new UdpCourierNetwork(networkingProxy, new UdpCourierNetworkConfiguration(50555));
            var                        tasks   = Util.Generate(4, i => new Thread(() => EntryPoint(i, network)).With(t => t.Start()));

            tasks.ForEach(t => t.Join());
        }