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()); }