public static Communicator Create()
        {
            ChannelEventDispatcher.TryInit();

            var communicator = new Communicator();
            communicator.ChannelFactory.TaskFactory = new UnitySlimTaskFactory { Owner = ChannelEventDispatcher.Instance };
            ((ObserverRegistry)communicator.ObserverRegistry).EventPoster = c => ChannelEventDispatcher.Post(c, null);

            return communicator;
        }
Exemplo n.º 2
0
        private static ClientWorker[] CreateRemoteClients(int count)
        {
            var serializer = new PacketSerializer(
                new PacketSerializerBase.Data(
                    new ProtoBufMessageSerializer(TypeModel.Create()),
                    new TypeAliasTable()));

            var communicators = new Communicator[count];
            for (int i = 0; i < count; i++)
            {
                var communicator = new Communicator(LogManager.GetLogger("Communicator"),
                                                    new IPEndPoint(IPAddress.Loopback, 8081),
                                                    _ =>
                                                    new TcpConnection(serializer, LogManager.GetLogger("Connection")));
                communicator.Start();
                communicators[i] = communicator;
            }

            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(10);

                var connectedCount = communicators.Count(c => c.State == Communicator.StateType.Connected);
                if (connectedCount == count)
                    break;

                var closedCount = communicators.Count(c => c.State == Communicator.StateType.Stopped);
                if (closedCount > 0)
                    throw new Exception("Connection closed!");
            }

            var clients = new ClientWorker[count];
            for (int i = 0; i < count; i++)
            {
                var requestWaiter = new SlimTaskRequestWaiter(communicators[i]);
                var server = new ServerRef(new SlimActorRef(1), requestWaiter, null);
                clients[i] = new ClientWorker(server);
            }
            return clients;
        }