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;
 }
Exemple #4
0
        //	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.
        }