'FlightSaved' Not Working?

SDK supports Prepar3D’s philosophy of an open development architecture and encourages third parties to bring new innovations with improved add-ons and training content.
Post Reply
EllipticCurve
Posts: 151
Joined: Mon Jun 12, 2017 6:14 pm

'FlightSaved' Not Working?

Post by EllipticCurve »

FlightLoaded works, but FlightSaved does not.

C++.

Code: Select all

hr = SimConnect_RequestSystemState(hSc, EVENT_SIM_FLIGHT_LOADED, "FlightLoaded");
hr = SimConnect_RequestSystemState(hSc, EVENT_SIM_FLIGHT_SAVED, "FlightSaved");
and...

Code: Select all

		case SIMCONNECT_RECV_ID_SYSTEM_STATE:
		{
			SIMCONNECT_RECV_SYSTEM_STATE *pState = (SIMCONNECT_RECV_SYSTEM_STATE*)pData;

			switch (pState->dwRequestID)
			{
				case EVENT_SIM_FLIGHT_LOADED:
				{
					SIMCONNECT_RECV_EVENT_FILENAME *file = (SIMCONNECT_RECV_EVENT_FILENAME*)pData;

					int len = strlen(file->szFileName);
					int startpos = 0;
					int endpos = 0;

					for(int i = len; i >= 0; i--)
					{
						if(file->szFileName[i] == '.')
						{
							endpos = i;
						}

						if(file->szFileName[i] == '\\')
						{
							startpos = i+1;
							break;
						}
					}

					memset(&scenario_name[0],0,sizeof(char)*MAX_PATH);
					strncpy(&scenario_name[0],&file->szFileName[startpos],endpos-startpos);

					perm << "Flight loaded: " << scenario_name << "\n";
				}
				break;

				case EVENT_SIM_FLIGHT_SAVED:
				{
					SIMCONNECT_RECV_EVENT_FILENAME *file = (SIMCONNECT_RECV_EVENT_FILENAME*)pData;
					perm << "Flight saved: " << file->szFileName << "\n";
				}
				break;
		...
		
All comments and opinions are my own.
EllipticCurve
Posts: 151
Joined: Mon Jun 12, 2017 6:14 pm

Re: 'FlightSaved' Not Working?

Post by EllipticCurve »

*** WORKING ***
*** SOLUTION BELOW ***

The answer to this is not obvious.

FlightLoaded and FlightSaved function differently.

First, the registration:

Code: Select all

hr = SimConnect_RequestSystemState(hSc, EVENT_SIM_FLIGHT_LOADED, "FlightLoaded");
hr = SimConnect_SubscribeToSystemEvent(hSc, EVENT_SIM_FLIGHT_SAVED, "FlightSaved");

Note the calls for the LOAD and SAVE are in different sections:

Code: Select all

void CALLBACK SimConnect_Callback(SIMCONNECT_RECV *pData,DWORD cbData,void *pContext)
{
	switch(pData->dwID)
	{
		// SITUATION SAVED HERE
		case SIMCONNECT_RECV_ID_EVENT_FILENAME:
		{
			SIMCONNECT_RECV_EVENT_FILENAME *file = (SIMCONNECT_RECV_EVENT_FILENAME*)pData;
			perm << "Flight saved: " << file->szFileName << "\n";
		}
		break;

		case SIMCONNECT_RECV_ID_SYSTEM_STATE:
		{
			SIMCONNECT_RECV_SYSTEM_STATE *pState = (SIMCONNECT_RECV_SYSTEM_STATE*)pData;

			switch (pState->dwRequestID)
			{
				// SITUATION LOADED HERE
				case EVENT_SIM_FLIGHT_LOADED:
				{
					SIMCONNECT_RECV_EVENT_FILENAME *file = (SIMCONNECT_RECV_EVENT_FILENAME*)pData;
					perm << "Flight loaded: " << file->szFileName << "\n";

				}
				break;
			}
			// end switch
		}
		break;
		// end case
	}
	// end switch
}
// end func
All comments and opinions are my own.
Post Reply