示例#1
0
        // Send a request to the tasking server
        public void SendRequest(MsgMeas.TaskOperationType operation)
        {
            MsgMeas.TaskRequest request = null;

            switch (operation)
            {
            case MsgMeas.TaskOperationType.Submit:     // Create a new task for "myproc"
                request = MsgMeas.TaskRequest.CreateSubmitRequest(MySupportedProcedure);
                break;

            case MsgMeas.TaskOperationType.Update:     // Update an existing task
                request = MsgMeas.TaskRequest.CreateUpdateRequest(MySupportedProcedure, m_currentTaskId);
                break;

            case MsgMeas.TaskOperationType.GetStatus:     // Get the status of an existing task
                request = MsgMeas.TaskRequest.CreateGetStatusRequest(m_currentTaskId);
                break;

            case MsgMeas.TaskOperationType.Cancel:     // Cancel a task
                request = MsgMeas.TaskRequest.CreateCancelRequest(m_currentTaskId);
                break;

            default:
                throw new ArgumentException("Unexpected operation " + operation.ToString());
            }

            // Sending the request
            SendRequest(request.ToXmlBytes());

            // Waiting for a response
            var responseXml = WaitForResponse();

            MsgMeas.TaskResponse response;
            try
            {
                response = new MsgMeas.TaskResponse(responseXml);
            }
            catch (MsgMeas.Neutral.InvalidMessageException e)
            {
                throw new InvalidOperationException("Failed to read response: " + e.Message);
            }

            if (response.RequestResult != MsgMeas.RequestResultType.Ok)
            {
                // Request failed!
                throw new InvalidOperationException("Unexpected request result " + response.RequestResult.ToString());
            }

            // Processing the request
            m_currentTaskId = response.StatusReports[0].TaskId; // Task ID is assigned by the server

            // Do whatever you want with the response...
        }
示例#2
0
        // Serve tasking clients
        public void Serve()
        {
            while (true)
            {
                var xmlBytes = ReceiveFromNetwork();
                MsgMeas.TaskRequest request;
                try
                {
                    request = new MsgMeas.TaskRequest(xmlBytes);
                }
                catch (MsgMeas.Neutral.InvalidMessageException e)
                {
                    Console.WriteLine("Failed to read request: " + e.Message);
                    continue;
                }

                MsgMeas.TaskResponse response = null;

                try
                {
                    if (request.Operation != MsgMeas.TaskOperationType.Submit &&
                        request.TaskId != CurrentTaskId)
                    {
                        // Unknown task ID
                        response = CreateFailureResponse(request.Operation);
                    }
                    else if ((request.Operation == MsgMeas.TaskOperationType.Submit ||
                              request.Operation == MsgMeas.TaskOperationType.Update) &&
                             request.ProcedureId != MySupportedProcedure)
                    {
                        // Cannot start a task or update an existing task, because the procedure is unknown.
                        response = CreateFailureResponse(request.Operation);
                    }
                    else
                    {
                        response = CreateOkResponse(request.Operation);
                    }
                }
                catch (InvalidOperationException e)
                {
                    Console.WriteLine("Failed to process request: " + e.Message);
                    continue;
                }

                SendToNetwork(response.ToXmlBytes());
            }
        }