コード例 #1
0
        /// <summary>
        /// Apply button pressed by operator, send service request
        /// </summary>
        private void buttonApply_Click(object sender, EventArgs e)
        {
            //StartRemoveInExercise9
            if (textBoxCurrentSpeed.Text.Length == 0)
            {
                statusStrip.Items["toolStripStatus"].Text = "Current speed must exist.";
                return;
            }

            if (textboxNewSpeed.Text.Length == 0)
            {
                statusStrip.Items["toolStripStatus"].Text = "New speed must be given.";
                return;
            }

            // Create service request
            Capabilities.CalculateSpeedDifference req = new Capabilities.CalculateSpeedDifference();

            // Set service request values
            try
            {
                req.Speed.Val = float.Parse(textboxNewSpeed.Text);
            }
            catch
            {
                statusStrip.Items["toolStripStatus"].Text = "Illegal speed format!";
                return;
            }

            req.ObjectWithSpeed.Obj = m_vehicle.Clone();

            try
            {
                // Send service request
                m_secDobConnection.ServiceRequest(req, new Safir.Dob.Typesystem.HandlerId(), this);
                statusStrip.Items["toolStripStatus"].Text = "OK";
            }
            catch (Safir.Dob.OverflowException)
            {
                statusStrip.Items["toolStripStatus"].Text = "Overflow when sending, please wait!";
            }
            //StopRemoveInExercise9
        }
コード例 #2
0
        public void OnServiceRequest(
            Safir.Dob.ServiceRequestProxy serviceRequestProxy,
            Safir.Dob.ResponseSender responseSender)
        {
            float speed, speedProperty, speedDiff;
            bool  bOk = false, bPropertyOk = true;

            Safir.Dob.Entity ent;
            Capabilities.CalculateSpeedDifferenceResponse serviceResponse =
                new Capabilities.CalculateSpeedDifferenceResponse();

            // Cast to known type, the CalculateSpeedDiff service.
            Capabilities.CalculateSpeedDifference receivedService =
                (Capabilities.CalculateSpeedDifference)serviceRequestProxy.Request;

            if (!receivedService.ObjectWithSpeed.IsNull() ||
                !receivedService.Speed.IsNull())
            {
                // Retrieve the values.
                speed = receivedService.Speed.Val;
                ent   = receivedService.ObjectWithSpeed.Obj;

                // Use the property mechanism to obtain the value from the
                // ObjectWithSpeed member. Be sure to check the mapping first.
                // Note, that this is just an example of how to use properties
                // and it has nothing to do with the service mechanism.
                if (Capabilities.SpeedObjectProperty.HasProperty(ent))
                {
                    // Check Speed property.
                    if (!Capabilities.SpeedObjectProperty.IsNullSpeedMember(ent))
                    {
                        // Retrieve the value from the entity by using the property.
                        speedProperty = Capabilities.SpeedObjectProperty.GetSpeedMember(ent);
                        speedDiff     = speedProperty - speed;
                        serviceResponse.SpeedDifference.Val = speedDiff;
                        bOk = true;
                    }
                    else
                    {
                        bPropertyOk = false;
                    }
                }
                else
                {
                    bPropertyOk = false;
                }
            }

            // Send response.
            if (bOk)
            {
                responseSender.Send(serviceResponse);
            }
            else if (!bPropertyOk)
            {
                // Respond with an error list that points out the member ObjectWithSpeed
                // as erroneous. This is to examplify usage of an error list.
                Safir.Dob.ErrorListResponse errorListResponse =
                    new Safir.Dob.ErrorListResponse();

                // Insert only one error in the list.
                errorListResponse.NumberOfErrors.Val = 1;

                // The error to be inserted in the error list.
                Safir.Dob.ResponseErrorInfo error =
                    new Safir.Dob.ResponseErrorInfo();

                error.Member.Val =
                    Capabilities.CalculateSpeedDifference.ObjectWithSpeedMemberIndex;
                error.Code.Val = Safir.Dob.ResponseGeneralErrorCodes.SafirReqErr;

                // Insert error in list.
                errorListResponse.Error[0].Obj = error;

                responseSender.Send(errorListResponse);
            }
            else
            {
                // Respond with a general error.
                Safir.Dob.ErrorResponse errorResponse =
                    new Safir.Dob.ErrorResponse();
                errorResponse.Code.Val = Safir.Dob.ResponseGeneralErrorCodes.SafirReqErr;
                responseSender.Send(errorResponse);
            }
        }