SimConnect Facilities Data

Hello All, I’m working on retrieving facilities data for the airports.
When trying to get the data it seems like I’m getting the same array of data every time.

Code
void handleReceived_Airport_List(Isolate* isolate, SIMCONNECT_RECV* pData, DWORD cbData)
{
SIMCONNECT_RECV_AIRPORT_LIST* pObjData = (SIMCONNECT_RECV_AIRPORT_LIST*)pData;
Local ctx = isolate->GetCurrentContext();
// printf(“cbData: %s \n”, cbData);
// printf(“Data message SIMCONNECT_RECV_FACILITIES_LIST: %i\n”, pObjData);
// printf(“Data msage SIMCONNECT_RECV_FACILITIES_LIST dwRequestID: %s \n”, pObjData->dwRequestID);
printf(“------------------------------------------------------------- \n”);
printf(“Data msage SIMCONNECT_RECV_FACILITIES_LIST dwRequestID: %i \n”, pObjData->dwRequestID);
printf(“Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: %i \n”, pObjData->dwArraySize);
printf(“Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: %i \n”, pObjData->dwEntryNumber);
printf(“Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: %i \n”, pObjData->dwOutOf);

// Result to be returned
Local<Object> result = Object::New(isolate);

// Populate all values here
Local<Array> nodes = Array::New(isolate);

// Array will be stored to this key
MaybeLocal<String> keyObj = String::NewFromUtf8(isolate, "DataMap");

int len = sizeof(pObjData->rgData);
printf("Array Size: %i And Value: %s 2,000 and Value at 100 %s \n",  len, pObjData->rgData[2000].Icao, pObjData->rgData[100].Icao);

for (int i = 0; i < (int)pObjData->dwArraySize; i++)
{
	try {
		Local<Object> node = Object::New(isolate);
		Local<Object> childNode = Object::New(isolate);
		MaybeLocal<String> keyLat = String::NewFromUtf8(isolate, "LAT");
		MaybeLocal<String> keyLong = String::NewFromUtf8(isolate, "LONG");
		MaybeLocal<String> keyIcao = String::NewFromUtf8(isolate, "ICAO");
		MaybeLocal<String> keyCords = String::NewFromUtf8(isolate, "CORDS");

		MaybeLocal<String> valueIcao = String::NewFromUtf8(isolate, pObjData->rgData[i].Icao);
		
		childNode->Set(ctx, keyLat.ToLocalChecked(), Number::New(isolate, pObjData->rgData[i].Latitude));
		childNode->Set(ctx, keyLong.ToLocalChecked(), Number::New(isolate, pObjData->rgData[i].Longitude));
		node->Set(ctx, keyIcao.ToLocalChecked(), valueIcao.ToLocalChecked());
		node->Set(ctx, keyCords.ToLocalChecked(), childNode);
		nodes->Set(ctx, i, node);

	}
	catch (...)
	{

	}
}

// Add all of the results to our object
result->Set(ctx, keyObj.ToLocalChecked(), nodes);

const int argc = 1;

Local<Value> argv[argc] = { result };
dataRequestCallbacks[pObjData->dwRequestID]->Call(isolate->GetCurrentContext()->Global(), argc, argv);

}

Output

Data msage SIMCONNECT_RECV_FACILITIES_LIST dwRequestID: 0
Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243
Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 0
Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30
Data message pObjData->rgData[0] Icao: HTSE

Data msage SIMCONNECT_RECV_FACILITIES_LIST dwRequestID: 0
Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243
Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 1
Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30
Data message pObjData->rgData[0] Icao: HTSE

Data msage SIMCONNECT_RECV_FACILITIES_LIST dwRequestID: 0
Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243
Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 2
Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30
Data message pObjData->rgData[0] Icao: HTSE

Any help would be greatly apprecaited.

Thank you,

Just an update. Facilities is broken and returns the same data in the receive packages. Going so far as to truncate the last array in the last package.

1 Like

Hi,

Just to let you know that I just stumbled over the exact same issue:

However interestingly I was able to retrieve a few correct (but not all! Especially not the airport I was mostly interested in: the one where I would take off and land) airports when subscribing to the facilities list (instead of requesting it). I still got the „Same Airstrip“ (HTSE) 30 times in either case though.