将 Lua 代码转换为 C++。

我目前有以下代码:

PACKETS = {};

function AddPacket(data)
    local id = data.ID;
    PACKETS[id] = {
    data.IP,
    data.PORT,
    data.PACKET,
    data.SOURCEIP,
    data.SOURCEPORT,
    data.PPMS};
end

function RemovePacket(id)
    PACKETS[id] = nil;
end

function LoopedThread()
    for k,v in pairs(PACKETS) do
        for i=1, v.PPMS do
            SendPacket(v.IP, v.PORT, v.PACKET, v.SOURCEIP, v.SOURCEPORT);
        end
    end
    Sleep(1);
end

这是用lua做的一个例子,但是我需要用C++完成这个。我有点困惑,当我尝试制作它时无法使它工作,如果有人能帮我或让我开始,谢谢。

我已经编写了套接字。

点赞
用户1243996
用户1243996

你为何不尝试将 Lua 与 C/C++ 集成呢?这门语言旨在方便地与 C/C++ 集成,在游戏开发中也很普遍。我建议您使用 luabind。它是 boost::python 库的 Lua 版本。链接:http://www.rasterbar.com/products/luabind.html

2012-06-22 05:42:59
用户321514
用户321514

你是否熟悉 C++ 中的标准模板库?它可能有许多容器类型,可以帮助你完成你正在尝试的事情。

对我来说,它看起来像是通过实现一个包含成员变量“IP”、“PORT”等的“Packet”结构体或类来完成的。

然后,如果你想通过它们的ID存储和访问它们,你可以创建一个stl::map,将ID号映射到Packet。

或者,像数据包一样普遍的情况是,你可能最终想以先进先出的方式存储它们,这可以用stl::queue完成。使用队列,它们以你放入的相同顺序出现,所以如果你将数据包1、2和3排队,之后要访问其中两个,你将按照顺序获得数据包1和2,而3将留待以后处理。

我的 C++ 很生疏,但我想到的是这样的:

struct Packet {
    char* ip;
    short port;
    // ... etc ...
}

stl::queue<Packet> packet_buffer;

void AddPacket(const Packet& packet_in) {
    packet_buffer.push(packet_in);
}

void RemoveLastPacket() {
    packet_buffer.pop();
}

void LoopedThread() {
    while (!packet_buffer.empty()) {
        SendPacket(packet_buffer.front());
        RemoveLastPacket();
    }
}

你也可以使用 map 做类似的事情,但它会更慢、更低效。除非你确实需要根据 ID 搜索特定的数据包,否则我建议使用队列,它可以非常快速。

2012-06-22 06:00:42