00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00035 #include "../Include/FlyLegacy.h"
00036 #include "../Include/Globals.h"
00037 #include "../Include/Situation.h"
00038 #include "../Include/Subsystems.h"
00039 #include "../Include/UserVehicles.h"
00040
00041 using namespace std;
00042
00043 static EMessageResult SendMessageToAmpSystems (SMessage *msg, CElectricalSystem *amp)
00044 {
00045 EMessageResult rc = MSG_IGNORED;
00046
00047 if (amp) {
00048
00049 vector<CSubsystem*>::iterator i;
00050 for (i=amp->subs.begin(); i!=amp->subs.end(); i++) {
00051 CSubsystem *s = *i;
00052 rc = s->ReceiveMessage (msg);
00053 if (rc == MSG_PROCESSED) {
00054
00055
00056 msg->receiver = s;
00057 }
00058 }
00059 }
00060
00061 return rc;
00062 }
00063
00064 static EMessageResult SendMessageToGasSystems (SMessage *msg, CFuelSystem *gas)
00065 {
00066 EMessageResult rc = MSG_IGNORED;
00067
00068 if (gas) {
00069
00070 vector<CFuelSubsystem*>::iterator i;
00071 for (i=gas->fsub.begin(); i!=gas->fsub.end(); i++) {
00072 CSubsystem *s = *i;
00073 rc = s->ReceiveMessage (msg);
00074 if (rc == MSG_PROCESSED) {
00075
00076
00077 msg->receiver = s;
00078 break;
00079 }
00080 }
00081 }
00082
00083 return rc;
00084 }
00085
00086 static EMessageResult SendMessageToAirplane (SMessage *msg, CAirplane *plan)
00087 {
00088 EMessageResult rc = MSG_IGNORED;
00089
00090 if (plan) {
00091
00092 rc = SendMessageToAmpSystems (msg, plan->amp);
00093 }
00094
00095
00096 if (msg->receiver == NULL) {
00097 rc = SendMessageToGasSystems (msg, plan->gas);
00098 }
00099
00100 return rc;
00101 }
00102
00103 EMessageResult SendMessage (SMessage *msg)
00104 {
00105 if (msg == NULL) return MSG_IGNORED;
00106
00107
00108 EMessageResult rc = MSG_IGNORED;
00109
00110 if (msg->receiver != NULL) {
00111
00112 CSubsystem *subs = (CSubsystem *)msg->receiver;
00113 rc = subs->ReceiveMessage (msg);
00114 } else {
00115
00117 CVehicleObject *vehi = globals->sit->GetUserVehicle ();
00118 EFlyObjectType userType = globals->sit->GetUserVehicleType ();
00119 switch (userType) {
00120 case TYPE_FLY_AIRPLANE:
00121 {
00122 CAirplaneObject *planObj = (CAirplaneObject *)vehi;
00123 CAirplane *plan = planObj->pAirplane;
00124 rc = SendMessageToAirplane (msg, plan);
00125 }
00126 break;
00127
00128 default:
00129
00130 ;
00131 }
00132
00134 }
00135
00136
00137 if (rc == MSG_IGNORED) {
00138 char id_string[8];
00139 char group_string[8];
00140 char dtag_string[8];
00141 TagToString (id_string, msg->id);
00142 TagToString (group_string, msg->group);
00143 TagToString (dtag_string, msg->user.u.datatag);
00144 globals->logWarning->Write ("SendMessage: No rcvr: id=%s group=%s, dtag=%s (0x%08X)",
00145 id_string, group_string, dtag_string, msg->user.u.datatag);
00146 }
00147
00148 msg->result = rc;
00149
00150 return rc;
00151 }