0

I have following code for DCS:World scripting:

koUDPSocket = {}

koUDPSocket.host = "127.0.0.1"
--koTCPSocket.host = "85.221.224.254"
koUDPSocket.port = 52525
koUDPSocket.socket = socket.udp()
koUDPSocket.JSON = require "JSON"

function koUDPSocket:send(data, typee)
    local message = {
        typee = typee,
        data = data,
    }
    env.info("SENDING:")
    env.info(koEngine.TableSerialization(message))
    local jsonString = self.JSON:encode(message).." \n"

    socket.try(self.socket:sendto(jsonString, self.host, self.port))
    env.info("UDP DATA SENT")
 end
 


function countUnitsInTable(table)
    local count = 0
    for _, _ in pairs(table) do
        count = count + 1
    end
    return count
end

function koEngine.loadMissionDataShort()

    --debugee.pool()
    koEngine.debugText("koEngine.loadMissionDataShort")
    koEngine.debugText("loading shorted mission data")

    for categoryName, categoryTable in pairs(MissionData) do
        if type(categoryTable) == "table" and categoryName ~= "properties" then
            for objectiveName, objectiveTable in pairs(categoryTable) do
                if type(objectiveTable) == "table" then
                    local unitCount = 0
                    if objectiveTable.groups then
                        for _, group in pairs(objectiveTable.groups) do
                            if group.units then
                                unitCount = unitCount + countUnitsInTable(group.units)
                            end
                        end
                    end

                    local shortData = {
                        underAttack = objectiveTable.underAttack,
                        coa = objectiveTable.coa,
                        status = objectiveTable.status,
                        priority = objectiveTable.priority,
                        type = categoryName,
                        units = unitCount
                    }
                    missionDataShort[objectiveName] = shortData
                    koEngine.debugText("insert: " .. tostring(objectiveName))
                end
            end
        end
    end

    -- now send the data
    koUDPSocket:send(missionDataShort, "MissionDataShort")

    koEngine.debugText("END populating short data")
end

which gets all objectives from mission data, puts in table, and attempts to send to my Node.JS server to process further. Everything works, expect line with local jsonString = self.JSON:encode(message).." \n" which gives error "unecptected type: function"

interesting is that trying type(message) gives table, and not function

how can I determine where the real mistake is? And how can I debug data to really see if it's a function? What's the best way to do it?

Here is a fragment of data, outputted using env.info(koEngine.TableSerialization(message)) and previous line:

2023-08-23 19:27:44.840 INFO    SCRIPTING (Main): SENDING:
2023-08-23 19:27:44.848 INFO    SCRIPTING (Main): {
    ['data'] = {
        ['FARP Oche'] = {
            ['type'] = 'FARP',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 0,
            ['coa'] = 'neutral',
        },
        ['Antenna Bulls'] = {
            ['type'] = 'Communication',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 0,
            ['coa'] = 'neutral',
        },
        ['FARP Tsvirmi'] = {
            ['type'] = 'FARP',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 0,
            ['coa'] = 'neutral',
        },
        ['Sukhumi-Babushara'] = {
            ['type'] = 'Aerodrome',
            ['underAttack'] = false,
            ['status'] = 'open',
            ['priority'] = 'strategic',
            ['units'] = 27,
            ['coa'] = 'blue',
        },
        ['FARP Lentehi'] = {
            ['type'] = 'FARP',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 0,
            ['coa'] = 'neutral',
        },
        ['Antenna Balkariya'] = {
            ['type'] = 'Communication',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 3,
            ['coa'] = 'red',
        },
        ['Antenna Oche'] = {
            ['type'] = 'Communication',
            ['underAttack'] = false,
            ['status'] = 'closed',
            ['priority'] = 'strategic',
            ['units'] = 0,
            ['coa'] = 'neutral',
        },

I wrote a code, I tested a possible problem, which it wasn't, and now I want to investigate further

1
  • Where did you initialize missionDataShort variable? It looks as it is a global variable already containing some content (including a function somewhere) - is it an object of some class? Commented Aug 24, 2023 at 6:00

1 Answer 1

0

idk I solved this, problem was with self.JSON:encode. Changed to JSON.encode, and worked

Sign up to request clarification or add additional context in comments.

1 Comment

Indeed, you should write self.JSON.encode(message) instead of self.JSON:encode(message)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.