CockpitConnect / msfs-simconnect-nodejs

Microsoft Flight Simulator 2020 SimConnect wrapper for NodeJS
https://www.cockpitconnect.com
47 stars 7 forks source link

Retrieving airports #8

Closed StevenBCamp closed 3 years ago

StevenBCamp commented 3 years ago

Hello All, I'm working on retrieving airports. The below code works to pull the list back and populate to nodejs. However there seems to be an issue with the rgData to get the array back. The issue is that rgData is staying static with the same set of values passed back the first time for each subsequent data call. Any assistance would be greatly appreciated.

Below is the output from the base SIMCONNECT_RECV_SIMOBJECT_DATA


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 SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 1 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


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 SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 3 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 4 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 5 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 6 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 7 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 8 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 9 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 10 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 11 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 12 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 13 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 14 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 15 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 16 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 17 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 18 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 19 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 20 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 21 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 22 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 23 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 24 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 25 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 26 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 27 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30


Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 1243 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 28 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

Data message SIMCONNECT_RECV_FACILITIES_LIST dwArraySize: 926 Data message SIMCONNECT_RECV_FACILITIES_LIST dwEntryNumber: 29 Data message SIMCONNECT_RECV_FACILITIES_LIST dwOutOf: 30

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();

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

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);
        // printf("Data message AIRPORT Latitude: %Lf \n", pObjData->rgData[i].Latitude);
        // printf("Data message AIRPORT Longitude: %Lf \n", pObjData->rgData[i].Longitude);
        // printf("Data message AIRPORT Icao: %s \n", pObjData->rgData[i].Icao);
        if (i == 0) {
            // printf("Data message AIRPORT Latitude: %Lf \n", pObjData->rgData[i].Latitude);
            // printf("Data message AIRPORT Longitude: %Lf \n", pObjData->rgData[i].Longitude);
            // printf("Data message AIRPORT Icao: %s \n", pObjData->rgData[i].Icao);
        }
        // printf("I Value: %i \n", i);
    }
    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);

} `

StevenBCamp commented 3 years ago

Wrote this same functionality in C# and found that the handler was still sending back the same set of data for each rgData. I'm going to close this as it seems like its an issue on Microsoft part.