Exemple #1
0
 public GameLoop(IContext messageContext, RemoteDispatcherProxy remoteProxy)
 {
     this.MessageContext = messageContext;
     this.RemoteProxy    = remoteProxy;
     this.IsRunning      = false;
     this.IsShuttingDown = false;
 }
        private static RemoteDispatcherProxy CreateRemoteDispatcher(IContext context, IRemoteCommunicator communicator)
        {
            RemoteDispatcherProxy proxy = new RemoteDispatcherProxy(context.Dispatcher, context.Serializer, communicator);

            //WriterListener listener = new WriterListener();
            //context.Dispatcher.RegisterListenerForAll(listener);
            return(proxy);
        }
Exemple #3
0
        public GameLoop CreateGameLoop()
        {
            if (threadStarter == null)
            {
                throw new InvalidOperationException(string.Format("Missing {0}", typeof(IThreadStarter).FullName));
            }
            // Validate that we have gotten all the external settings needed. Like configuration file, communicator template/factory, ...

            IContext              messageContext = CreateMessageContext();
            IRemoteCommunicator   communicator   = CreateContextCommunicator();
            RemoteDispatcherProxy remoteProxy    = CreateRemoteDispatcher(messageContext, communicator);

            return(new GameLoop(messageContext, remoteProxy));
        }
        void Start()
        {
            string contextName = "Context" + (IsHost ? ".Host" : ".Client");

            context = CreateContext(contextName);


            DotNetThreadStarter      threadStarter = new DotNetThreadStarter();
            MemoryMappedCommunicator communicator  = new MemoryMappedCommunicator(threadStarter, "Tgrc.Messages.MemoryMap", IsHost);

            proxy = CreateRemoteDispatcher(context, communicator);

            lastSend = DateTime.UtcNow;

            communicator.StartThreads();
        }
        private static void SameProcessRemoteCommunicatorTest()
        {
            IContext contextA = CreateContext("ContextA");
            IContext contextB = CreateContext("ContextB");

            SameProcessRemoteCommunicator communicatorA = new SameProcessRemoteCommunicator();
            SameProcessRemoteCommunicator communicatorB = new SameProcessRemoteCommunicator(communicatorA);

            RemoteDispatcherProxy proxyA = CreateRemoteDispatcher(contextA, communicatorA);
            RemoteDispatcherProxy proxyB = CreateRemoteDispatcher(contextB, communicatorB);

            PayloadA plA = new PayloadA();
            PayloadB plB = new PayloadB();

            var message = contextA.MessageComposer.Compose(plA, plB);

            contextA.Dispatcher.Send(message);
            contextA.Dispatcher.DispatchMessages();

            proxyB.ForwardRemoteMessages();
            contextB.Dispatcher.DispatchMessages();
        }
        private static void MemoryMappedTest(string[] args)
        {
            bool isClient = args.Length > 0 && args[0] == "client";
            bool isHost   = !isClient;

            string   contextName = "Context" + (isClient ? ".Client" : ".Host");
            IContext context     = CreateContext(contextName);


            DotNetThreadStarter      threadStarter = new DotNetThreadStarter();
            MemoryMappedCommunicator communicator  = new MemoryMappedCommunicator(threadStarter, "Tgrc.Messages.MemoryMap", isHost);

            RemoteDispatcherProxy proxy = CreateRemoteDispatcher(context, communicator);

            communicator.StartThreads();

            DateTime lastSend = DateTime.UtcNow;

            while (true)
            {
                if ((DateTime.UtcNow - lastSend) > TimeSpan.FromSeconds(1.5))
                {
                    for (int i = 0; i < 500; i++)
                    {
                        IMessage message = CreateBasicMessage(context);
                        context.Dispatcher.Send(message);
                    }

                    lastSend = DateTime.UtcNow;
                }


                context.Dispatcher.DispatchMessages();
                proxy.SendToRemote();
                proxy.ForwardRemoteMessages();
            }
        }
Exemple #7
0
        private RemoteDispatcherProxy CreateRemoteDispatcher(IContext context, IRemoteCommunicator communicator)
        {
            RemoteDispatcherProxy proxy = new RemoteDispatcherProxy(context.Dispatcher, context.Serializer, communicator);

            return(proxy);
        }