Exemplo n.º 1
0
        private void processStream(Stream stream)
        {
            MessageStream msgStream = new MessageStream(new StandardStream(stream));

            Message msg = msgStream.readMessage();

            if (msg == null)
            {
                return;
            }

            EMessageType mType = (EMessageType)msg.getType();

            if (mType == EMessageType.eNumber)
            {
                // End a session
                MessageNumber response = new MessageNumber(msg);
                int           sid      = response.getNumber();
                m_agent.signalToStopSession(sid);
            }
            else if (mType == EMessageType.ePidAndCompileRequest)
            {
                MessagePidAndCompileRequest request = new MessagePidAndCompileRequest(msg);
                TCompileResult cr = m_agent.compile(request.getPid(), request.getCmd(), request.getWorkingDir());

                // The output file was already saved to local disk by the agent, now respond the result only
                msg = MessageCompileResponse.createMessage(cr.wasExec, cr.exitCode, cr.outputText, null, 0);
                msgStream.writeMessage(msg);
            }
            else
            {
                // WTF???
            }
        }
Exemplo n.º 2
0
        private void handleMessageCompile(Message msg)
        {
            MessageCompileRequest msgCompile = null;

            try
            {
                msgCompile = new MessageCompileRequest(msg);
            }
            catch (Exception)
            {
                // Ignore
                return;
            }

            string cmd = msgCompile.getCmd();

            ICmdParser parser = CmdParserFactory.createCmdParser(cmd);

            string outputFileName;

            cmd = parser.makeServerCmd(m_sessionFolderPath, out outputFileName, m_debugPrefixMap);
            string alias = parser.getAlias();

            Message respondMessage = null;
            bool    ok             = false;

            if (alias != null && outputFileName != null)
            {
                // Compile
                CConsole.writeInfoLine(string.Format("{0} Recv a compile request: {1}", cur(), alias));

                string outputFilePath = m_sessionFolderPath + outputFileName;

                string workingDir = parser.getLocalSpecificWorkingDir();
                if (workingDir == null)
                {
                    workingDir = m_sessionFolderPath;
                }

                TProcessResult pr = m_processCompile.execute(cmd, workingDir, outputFilePath);

                if (!pr.wasExec || pr.exitCode != 0)
                {
                    CConsole.writeInfoLine(
                        string.Format("{0} Compile error: wasExec=[{1}], exitCode=[{2}], cmd=[{3}], outputText=[{4}]",
                                      cur(), pr.wasExec, pr.exitCode, cmd, pr.outputText)
                        );
                    respondMessage = MessageCompileResponse.createMessage(pr.wasExec, pr.exitCode, pr.outputText, null, 0);
                }
                else
                {
                    ok = true;
                    // Read the output file from disk
                    byte[] buffer   = IOUtils.readFile_Bytes(outputFilePath);
                    int    fileSize = buffer == null ? 0 : buffer.Length;
                    respondMessage = MessageCompileResponse.createMessage(
                        pr.wasExec, pr.exitCode, pr.outputText, buffer, fileSize);
                }
            }
            else
            {
                CConsole.writeInfoLine(string.Format("{0} Receive a compile request but it is a invalid command", cur()));
                respondMessage = MessageCompileResponse.createMessage(false, 0, "error: Invalid compile command!", null, 0);
            }

            CConsole.writeInfoLine(string.Format("{0} Send compile result: {1}, success = {2}",
                                                 cur(), alias != null ? alias : "[no file]", ok));

            m_messageStream.writeMessage(respondMessage);
        }