/// <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 }
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); } }