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); }
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(); } }
private RemoteDispatcherProxy CreateRemoteDispatcher(IContext context, IRemoteCommunicator communicator) { RemoteDispatcherProxy proxy = new RemoteDispatcherProxy(context.Dispatcher, context.Serializer, communicator); return(proxy); }