luawebsocket是否支持twistedpython后端?

2024-04-27 05:06:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Lua写了一个小lib,它是一个bot。但是当它连接到服务器时,服务器看不到它。我没有自己的服务器,但我知道它有一个扭曲的python后端。我想这可能和客户端发送给服务器的头有关。因为,如果我运行一个基于python的bot,它会连接起来并且工作得很好,这里是连接模块

-- global objects --
mgr = {};
group = {};
message = {};
user = {};
login = {};
event = {};

-- LOCAL OBJECTS --

local map = {};

-- LOCAL VARS --
local host = 'ws://sv1.uchat.pw:443';
local connected = false;

-- local imports --
local ws = require('websocket');
local json = require('json');
-- local functions --

local function auth()
    local data = json.encode{event='bauth', name=login.user, pwd=login.password}
    map[group.name]:send(data)
end

local function sendcmd(...)
    local data = json.encode{...};
    print(data);
    cl:send(data);
end

local function events(e, evt)
    print(e, evt)
    if e.buc ~= nil then
        group['count'] = evt.uc;
    end
    if e.bmsg ~= nil then
        user['name'] = evt.un;
        message['body'] = evt.msg;
        event.on_message(group, user, message);
    end
    if e.block ~= nil then
        connected = false;
    end
    if e.bauthdeny ~= nil then
        group.disconnect();
        print('bad login');
    end
end
local function event_handle(data)
        local data = json.decode(data);
        local event = data['event'];
        events(event, data);
end

local function main()
    while connected do
        local data = map[group.name]:receive();
        event_handle(data);
    end
end     
local function uchat_connect(resource)
    local cl = ws.client.sync();
    local ok, _sockError = cl:connect(host, resource)
    if ok then
        group['name'] = resource;
        map[group.name] = cl;
        connected = true;
        event.on_connect(group);
        auth();
    else
        event.on_connect_error(group, _sockError);

    end
end
local function uchat_init()
    mgr.on_init()
    for i, resource in pairs(login.rooms) do
        resource = login.rooms[i];
        uchat_connect(resource);
    end
end

local function disconnect()
    cl:close();
end

local function killme()
    connected = false;
end

mgr['main'] = main;
group['send'] = send;
group['disconnect'] = disconnect;
mgr['killme'] = killme
mgr['init'] = uchat_init;

示例.lua

require("uchat")

function on_connect(group) 
    print('connected to ' .. group.name);
end
function on_close(group)
    print('disconnected from ' .. group.name);
end
function on_message(group, user, message)
    print(group.name, user.name, message.body);
end

function on_connect_error(group, error)
    print(group, error);
end

function init()
    login['user'] = 'testaccount';
    login['password'] = '9911324';
    login['rooms'] = {'examplegroup'}
    event['on_disconnect'] = on_close;
    event['on_connect'] = on_connect;
    event['on_message'] = on_message;
    event['on_connect_error'] = on_connect_error;
end
mgr['on_init'] = init;
mgr.init()
mgr.main()

当它连接时,您将看到:

bauthok - tableuc - table 但它不会显示在用户列表中,之后也不会再出现任何事件。你知道吗


Tags: nameeventmessagedatainitonlocalconnect