public ITcpFrame PerformService(ILogger logger, IAppDocument iAppDocument) { AppDocument appDocument; appDocument = ( AppDocument )iAppDocument; MainForm mainForm = appDocument.MainForm; // Start the browser. MainForm.StartBrowserFormDelegate startBrowserFormDelegate; startBrowserFormDelegate = new MainForm.StartBrowserFormDelegate(mainForm.StartBrowserForm); BrowserForm browserForm = ( BrowserForm )mainForm.Invoke(startBrowserFormDelegate); // Decode the request and generate a response. ITcpFrame responseFrame = BuildResponse(browserForm); // Stop the browser. MainForm.StopBrowserFormDelegate stopBrowserFormDelegate; stopBrowserFormDelegate = new MainForm.StopBrowserFormDelegate(mainForm.StopBrowserForm); object[] args = new object[1]; args[0] = browserForm; bool isRemoved = ( bool )mainForm.Invoke(stopBrowserFormDelegate, args); // Return the framed results. return(responseFrame); }
public DispatchLoop(TcpListener tcpListener, ILogger logger, IProtocolFactory protocolFactory, IAppDocument appDocument) { this.m_TcpListener = tcpListener; this.m_Logger = logger; this.m_ProtocolFactory = protocolFactory; this.AppDocument = appDocument; }
public TcpServer(int serverPort, IThreadDispatcher threadDispatcher, IProtocolFactory protocolFactory, ILogger logger, IAppDocument appDocument) { ServerPort = serverPort; ThreadDispatcher = threadDispatcher; ProtocolFactory = protocolFactory; Logger = logger; AppDocument = appDocument; }
// Server IPC Cycle. // Receive a request. Service the request. Reply with the result. static public async Task <int> ReceiveServiceReply(BufferedStream bufferedStream, IServiceRequest serviceRequest, ILogger logger, IAppDocument appDocument) { int numberSent; // Receive the request from the client. ITcpFrame requestFrame = await ReceiveFrame(bufferedStream, logger); // Identify and create the specific service to be performed. IPerformService performService = serviceRequest.CreateService(requestFrame, logger); // Perform the specific service and provide a response. ITcpFrame responseFrame = performService.PerformService(logger, appDocument); // Reply the response to the client. numberSent = await SendFrame(responseFrame, bufferedStream, logger); return(numberSent); }
public void StartDispatching(TcpListener tcpListener, ILogger logger, IProtocolFactory protocolFactory, IAppDocument appDocument) { tcpListener.Start(); // Create the limited number of threads accepting connections. for (int indexThread = 0; indexThread < this.m_SizeThreadPool; indexThread++) { DispatchLoop dispatchLoop = new DispatchLoop(tcpListener, logger, protocolFactory, appDocument); ThreadStart clientThreadStart = new ThreadStart(dispatchLoop.RunDispatcher); Thread clientThread = new Thread(clientThreadStart); clientThread.Start(); clientThread.IsBackground = true; logger.WriteEntry("Created and started Thread = " + clientThread.GetHashCode()); } }
public void StartDispatching(TcpListener tcpListener, ILogger logger, IProtocolFactory protocolFactory, IAppDocument appDocument) { IServerProtocol serverProtocol; tcpListener.Start(); // Run forever, accepting and spawning threads to service each connection. for (; ;) { try { // Block waiting for a connection. Socket clientSocket = tcpListener.AcceptSocket(); serverProtocol = protocolFactory.CreateServerProtocol(clientSocket, logger); // A client has connected so create a thread to handle it. ParameterizedThreadStart clientThreadStart = new ParameterizedThreadStart(serverProtocol.HandleClientConnection); Thread clientThread = new Thread(clientThreadStart) { IsBackground = true }; clientThread.Start(); logger.WriteEntry("Created and started Thread = " + clientThread.GetHashCode()); } catch (System.IO.IOException ioException) { logger.WriteEntry("Exception = " + ioException.Message); } } // Unreachable. }