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);
        }
Esempio n. 2
0
        static public async Task <int> SendFrame(ITcpFrame tcpFrame, BufferedStream bufferedStream, ILogger logger)
        {
            int    count;
            int    offset;
            string methodName = "SendFrame";

            int sendFrameSize = tcpFrame.FramePacket.Length;

            byte[] sendFrameBytes = tcpFrame.FramePacket;

            //	Encode the packet length into a byte array.
            byte[] sendLengthBytes = BitConverter.GetBytes(sendFrameSize);

            //	Send the packet length to the server.
            offset = 0;
            count  = sendLengthBytes.Length;
            await bufferedStream.WriteAsync(sendLengthBytes, offset, count);

            logger.WriteEntry(methodName + " sent frame length " + sendFrameSize.ToString());

            if (sendFrameSize > 0)
            {
                //	Send the request frame.
                offset = 0;
                count  = sendFrameSize;
                await bufferedStream.WriteAsync(sendFrameBytes, offset, count);

                logger.WriteEntry(methodName + " sent packet to server. ");
            }
            return(sendFrameSize);
        }
Esempio n. 3
0
        public async Task <IActionResult> TestSendReceive([FromBody] XmlPageRequestBody xmlPageRequestBody)
        {
            ILogger              logger = new ConsoleLogger();
            JsonResult           jsonResult;
            RequestResponseFrame responseFrame;
            object jsonObject;

            string methodName = "TestSendReceive";

            logger.WriteEntry(methodName + " entry.");

            if (ModelState.IsValid)
            {
                logger.WriteEntry(methodName + " ModelState is valid.");

                string receiveUrl    = xmlPageRequestBody.ReceiveUrl;
                string receiveSearch = xmlPageRequestBody.ReceiveSearch;

                GeneralClassLibrary.XmlPageRequestFrame xmlPageRequestFrame = new XmlPageRequestFrame(xmlPageRequestBody);

                //	Transform the API request to an ITcpFrame.
                byte[] sendFrameBytes             = xmlPageRequestFrame.ToByteArray();
                RequestResponseFrame requestFrame = new RequestResponseFrame(sendFrameBytes);

                //	Connect to the server and obtain a network stream.
                BufferedStream bufferedStream = await SendReceiveReply.ConnectToServer(RemoteHostName, RemotePortNumber, SizeStreamBuffer, logger);

                //	Send and receive data via the stream.
                responseFrame = await SendReceiveReply.RequestReceiveResponse(bufferedStream, requestFrame, logger);

                ITcpFrame tcpFrame        = responseFrame;
                byte[]    replyFrameBytes = tcpFrame.FramePacket;

                IpcFrameBase ipcFrameBase = ( IpcFrameBase )IpcFrameBase.FromByteArray(replyFrameBytes);

                //	Transform the ITcpFrame to an API response.
                logger.WriteEntry(methodName + " building the JSON result.");
                XmlPageReplyFrame xmlPageReplyFrame = ( XmlPageReplyFrame )ipcFrameBase;
                jsonObject = new
                {
                    textArray = xmlPageReplyFrame.ResultList,
                    isSuccess = true
                };
            }
            else
            {
                logger.WriteEntry(methodName + " ModelState is not valid!");
                jsonObject = new
                {
                    textArray = new List <string>(),
                    isSuccess = false
                };
            }

            logger.WriteEntry(methodName + " exit.");

            jsonResult = new JsonResult(jsonObject);
            return(jsonResult);
        }
Esempio n. 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 IPerformService CreateService(ITcpFrame requestFrame, ILogger logger)
        {
            IPerformService performService;
            IpcFrameBase    ipcFrameBase = ( IpcFrameBase )IpcFrameBase.ByteArrayToObject(requestFrame.FramePacket);

            switch (ipcFrameBase.ServiceActionEnum)
            {
            case ServiceActionEnum.XmlPageRequestServiceAction:
                XmlPageRequestFrame xmlPageRequestFrame = ( XmlPageRequestFrame )ipcFrameBase;
                XmlPageService      xmlPageService      = new XmlPageService(xmlPageRequestFrame);
                performService = xmlPageService;
                break;

            case ServiceActionEnum.SizeServiceActionEnum:
            default:
                performService = null;
                break;
            }
            return(performService);
        }
Esempio n. 6
0
        //	Client IPC Cycle.
        //	Send a request. Receive the response.
        static public async Task <RequestResponseFrame> RequestReceiveResponse(BufferedStream bufferedStream, ITcpFrame sendTcpFrame, ILogger logger)
        {
            //	Send the request to the server.
            await SendFrame(sendTcpFrame, bufferedStream, logger);

            //	Receive the response from the server.
            ITcpFrame tcpFrame;

            tcpFrame = await ReceiveFrame(bufferedStream, logger);

            //	The response is ready to be processed.
            RequestResponseFrame responseFrame = new RequestResponseFrame(tcpFrame.FramePacket);

            return(responseFrame);
        }