2014-03-24 5 views
2

내 질문은 루아 소켓에 관한 것입니다, 나는 채팅이 있고 그 채팅을 위해 봇을 만들고 싶다고 말합니다. 하지만 채팅은 연결 기능이다중 연결을 처리하는 lua 소켓

function main() 
    while true do 
    rect, r, st = socket.select({con}, nil, 0.2) 
    if (rect[con] ~= nil) then 
     resp, err, part = con:receive("*l") 
     if not(resp == nil) then 
      self.events(resp) 
end 
    end 
     end 
      end 

지금 때 것이

function connect(room) 
    con = socket.tcp() 
    con:connect(getServer(room), port) 
    con:settimeout(0) 
    con:setoption('keepalive', true) 
    con:send('auth' .. room) 

와 루프 기능과 같을 것이다 getServer 를라는 함수에 의해 계산되는 모든 defferent 서버에 여러 개의 객실을 보유하고 실행되는 모든 것은 첫 번째 방의 데이터 만 수신하며이를 수정하는 방법은 모르겠다.

+0

각 객실마다 connect()를 호출하는 코드를 표시하고 기본 코드는 조각을 표시하지 않습니다. 그리고 나쁜 들여 쓰기를 고쳐라. – Schollii

+0

파일이 커지므로 github 저장소에 연결하겠습니다. ([link Github] (https://github.com/ericraio/ch.lua/blob/master/ch.lua) [link] 그냥 추가하십시오. socket.select()와 thats 꽤 많이 들었습니다 – user3103366

+0

이것은 제가 의도 한 바가 아니므로'connect (room)'을 호출하는 코드와'main()'을 호출하는 코드를 보여줍니다. – Schollii

답변

1

연결 배열을 만들어보십시오. 연결에 대한 방의지도가 유용 할 수도 있습니다. 예 : rect 판독 할 데이터가 존재하는 연결 발견 항목의 배열은

local connections = {} 
local roomConnMap = {} 

function connect(room) 
    local con = socket.tcp() 
    con:connect(getServer(room), port) 
    con:settimeout(0) 
    con:setoption('keepalive', true) 
    con:send('auth' .. room) 

    table.insert(connections, con) 
    roomConnMap[room] = con 
end 

function main() 
    while true do 
    local rect, r, st = socket.select(connections, nil, 0.2) 
    for i, con in ipairs(rect) do 
     resp, err, part = con:receive("*l") 
     if resp ~= nil then 
      self.events(resp) 
     end 
    end 
    end 
end 

참고있다. 따라서 for i,con 루프에서 con은 연결 객체이므로 connections[con]을 사용하지 마십시오. 연결은 배열이 아니고 맵이 아니기 때문에 의미가 없습니다.

+0

나는 이것을 시도했다. 먼저 테이블 값을 호출하려고 시도했다. 그래서 'con in ipairs (rect) do'에 대해서 말했고 실제로는 결코 그곳에 연결하지 않았다. – user3103366

+0

LOL thats 내 잘못으로 바이트를 보내는 것을 잊었다. 잘 – user3103366

+0

@ user3103366 그럼 문제가 해결 되었습니까? – Schollii

관련 문제