Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local HOST = "bridge.computercraft.ru"
- local PORT = 1111
- local RC = {}
- local socket, internet
- local ready = false
- local computer = require('computer')
- -- SOCKET --
- local function localInit()
- internet = require("internet")
- socket = internet.socket(HOST, PORT)
- end
- function RC.init()
- local ok = pcall(localInit)
- ready = ok
- return ok
- end
- function RC.finish()
- socket:close()
- ready = false
- end
- local function localSend(s)
- socket:write(s.."\0")
- --socket:flush()
- end
- function RC.send(msg)
- if ready then
- local ok = pcall(localSend, msg)
- ready = ok
- return ok
- end
- return false
- end
- function RC.auth(key)
- return RC.send("KOC-"..key)
- end
- local function localReceive()
- local sym = socket:read(1)
- if sym == '' then
- return false
- else
- local message = ''
- while sym ~= '\n' do
- message = message..sym
- sym = socket:read(1)
- end
- return true, message
- end
- end
- function RC.receive()
- if ready then
- local ok, state, msg = pcall(localReceive)
- return state, msg
- end
- return false
- end
- -- split message to words and params
- local function split(message)
- local tokens = {}
- for token in message:gmatch("%S+") do
- table.insert(tokens, token)
- end
- return tokens
- end
- -- HANDLERS --
- local handlers = {}
- function RC.pull()
- local state,tmp = localReceive()
- if state then
- -- Отправляем эвент.
- computer.pushSignal('bridge_message', tmp)
- -- Чекаем все хендлеры, на случай, если кто-то отвечает за полученную команду.
- local tokens = split(tmp)
- if handlers[tokens[1]] ~= nil then
- -- отделяем аргументы
- local args = {}
- for c=2, #tokens do table.insert(args, tokens[c]) end
- -- вызываем подопытные функции передав им полученные аргументы
- for k, callback in pairs(handlers[tokens[1]]) do
- state, error_message = pcall(callback, table.unpack(args))
- if (not state) then
- print('Нефиг корявые функции писать!!! by NEO and Totoro ')
- error(error_message)
- end
- end
- end
- end
- end
- function RC.addHandler(command, callback)
- if command ~= nil and command ~= "" then
- if callback ~= nil and type(callback) == 'function' then
- if handlers[command] == nil then handlers[command] = {} end
- table.insert(handlers[command], callback)
- end
- end
- end
- function RC.removeHandler(command)
- handlers[command] = nil
- end
- return RC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement