init
This commit is contained in:
parent
9f16d8268c
commit
dcf097b8f9
132
README.md
132
README.md
@ -1,3 +1,131 @@
|
|||||||
# nchan
|
# Simple lua nchan publisher
|
||||||
|
|
||||||
Паблишер nchan
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
luarocks install nchan
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Channels
|
||||||
|
|
||||||
|
***Publish message in channel***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = channel.publish('test')
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
***Connect with Basic auth***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
channel.nchan.login = 'test'
|
||||||
|
channel.nchan.password = 'test'
|
||||||
|
|
||||||
|
result,msg = channel.publish('test')
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
***Connect with Bearer auth***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
channel.nchan.token = 'token'
|
||||||
|
|
||||||
|
result,msg = channel.publish('test')
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
***Delete channel***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = channel.delete()
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
***Get channel info***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = channel.status()
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
print(msg.messages)
|
||||||
|
print(msg.requested)
|
||||||
|
print(msg.subscribers)
|
||||||
|
print(msg.last_message_id)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Channel info also available after publishing:
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.channel')
|
||||||
|
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = channel.publish('test')
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
print(channel.nchan.info.messages)
|
||||||
|
print(channel.nchan.info.requested)
|
||||||
|
print(channel.nchan.info.subscribers)
|
||||||
|
print(channel.nchan.info.last_message_id)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Groups
|
||||||
|
|
||||||
|
***Get group info***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.group')
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = group.status()
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
print(msg.messages)
|
||||||
|
print(msg.requested)
|
||||||
|
print(msg.subscribers)
|
||||||
|
print(msg.last_message_id)
|
||||||
|
|
||||||
|
```
|
||||||
|
***Set group limits***
|
||||||
|
|
||||||
|
```
|
||||||
|
local channel = require('nchan.group')
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = group.limits({
|
||||||
|
['max_channels']=15,
|
||||||
|
['max_subs']=1000
|
||||||
|
})
|
||||||
|
|
||||||
|
```
|
||||||
|
|||||||
31
nchan-1.0-2.rockspec
Normal file
31
nchan-1.0-2.rockspec
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package = "Nchan"
|
||||||
|
version = "1.0-2"
|
||||||
|
source = {
|
||||||
|
url = "git://github.com/Zoviet/nchan.git",
|
||||||
|
tag = "v1.0-1"
|
||||||
|
}
|
||||||
|
description = {
|
||||||
|
summary = "Simple Lua nchan publisher and group manager",
|
||||||
|
detailed = [[
|
||||||
|
Message publishing, channel info, channels delete, groups info and groups limits setter.
|
||||||
|
]],
|
||||||
|
homepage = "https://github.com/Zoviet/nchan",
|
||||||
|
license = "MIT/X11"
|
||||||
|
}
|
||||||
|
dependencies = {
|
||||||
|
"lua >= 5.1, < 5.4",
|
||||||
|
"luasocket >= 2.0",
|
||||||
|
"lua-cjson >= 2.0",
|
||||||
|
"mimetypes >= 1.0"
|
||||||
|
}
|
||||||
|
external_dependencies = {
|
||||||
|
|
||||||
|
}
|
||||||
|
build = {
|
||||||
|
type = "builtin",
|
||||||
|
modules = {
|
||||||
|
["nchan.nchan"] = "nchan/nchan.lua",
|
||||||
|
["nchan.channel"] = "nchan/channel.lua",
|
||||||
|
["nchan.group"] = "nchan/group.lua"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
nchan-1.0-2.src.rock
Normal file
BIN
nchan-1.0-2.src.rock
Normal file
Binary file not shown.
28
nchan/channel.lua
Executable file
28
nchan/channel.lua
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
-- Simple nchan lua client
|
||||||
|
|
||||||
|
local _M = {}
|
||||||
|
|
||||||
|
_M.nchan = require ('nchan.nchan')
|
||||||
|
|
||||||
|
|
||||||
|
function _M.publish(message)
|
||||||
|
_M.nchan.method = 'POST'
|
||||||
|
return _M.nchan.request(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
function _M.status()
|
||||||
|
_M.nchan.method = 'GET'
|
||||||
|
local result, msg = _M.nchan.request()
|
||||||
|
if result then
|
||||||
|
return true, _M.nchan.info
|
||||||
|
end
|
||||||
|
return false, msg
|
||||||
|
end
|
||||||
|
|
||||||
|
function _M.delete()
|
||||||
|
_M.nchan.method = 'DELETE'
|
||||||
|
return _M.nchan.request()
|
||||||
|
end
|
||||||
|
|
||||||
|
return _M
|
||||||
29
nchan/group.lua
Executable file
29
nchan/group.lua
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
-- Simple nchan lua client
|
||||||
|
|
||||||
|
local _M = {}
|
||||||
|
|
||||||
|
_M.nchan = require ('nchan.nchan')
|
||||||
|
|
||||||
|
_M.nchan.codes = {
|
||||||
|
[200] = 'SUCCESS (group existed)',
|
||||||
|
[201] = 'CREATED (limits sets)',
|
||||||
|
[202] = 'ACCEPTED'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _M.limits(limits)
|
||||||
|
_M.nchan.method = 'POST'
|
||||||
|
return _M.nchan.request(message)
|
||||||
|
end
|
||||||
|
|
||||||
|
function _M.status()
|
||||||
|
_M.nchan.method = 'GET'
|
||||||
|
local result, msg = _M.nchan.request()
|
||||||
|
if result then
|
||||||
|
return true, _M.nchan.info
|
||||||
|
end
|
||||||
|
return false, msg
|
||||||
|
end
|
||||||
|
|
||||||
|
return _M
|
||||||
78
nchan/nchan.lua
Executable file
78
nchan/nchan.lua
Executable file
@ -0,0 +1,78 @@
|
|||||||
|
|
||||||
|
-- Simple nchan lua client
|
||||||
|
|
||||||
|
local json = require ('cjson')
|
||||||
|
local http = require('socket.http')
|
||||||
|
local mime = require('mime')
|
||||||
|
local ltn12 = require('ltn12')
|
||||||
|
|
||||||
|
http.TIMEOUT = 15
|
||||||
|
|
||||||
|
local _M = {}
|
||||||
|
|
||||||
|
_M.host = 'http://127.0.0.1' --Nchan host
|
||||||
|
_M.port = nil --Nchan port
|
||||||
|
_M.endpoint = 'pub' -- Nchan publisher endpoint
|
||||||
|
_M.token = nil
|
||||||
|
_M.login = nil
|
||||||
|
_M.password = nil
|
||||||
|
_M.info = {}
|
||||||
|
|
||||||
|
_M.method = 'POST'
|
||||||
|
|
||||||
|
-- http status codes with info
|
||||||
|
|
||||||
|
_M.codes = {
|
||||||
|
[200] = 'SUCCESS (channel existed or deleted)',
|
||||||
|
[201] = 'CREATED (at least 1 subscriber presented)',
|
||||||
|
[202] = 'ACCEPTED (no subscribers are present)'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _M.request(message)
|
||||||
|
local source = ltn12.source.empty()
|
||||||
|
local endpoint = _M.host..'/'.._M.endpoint
|
||||||
|
local respbody = {}
|
||||||
|
local headers = {
|
||||||
|
['Content-type'] = 'application/x-www-form-urlencoded',
|
||||||
|
['Accept'] = 'text/json'
|
||||||
|
}
|
||||||
|
if message then
|
||||||
|
headers['content-length'] = tostring(#message)
|
||||||
|
if (type(message) == 'table') then
|
||||||
|
source = ltn12.source.cat(message)
|
||||||
|
else
|
||||||
|
source = ltn12.source.string(message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if _M.token then
|
||||||
|
headers["Authorization"] = 'Bearer '.._M.token
|
||||||
|
end
|
||||||
|
if _M.login and _M.password then
|
||||||
|
headers["Authorization"] = 'Basic '..(mime.b64(_M.login..":".. _M.password))
|
||||||
|
end
|
||||||
|
if _M.port then
|
||||||
|
endpoint = _M.host..':'.._M.port..'/'.._M.endpoint
|
||||||
|
end
|
||||||
|
|
||||||
|
local result, respcode, respheaders, respstatus = http.request {
|
||||||
|
method = _M.method,
|
||||||
|
headers = headers,
|
||||||
|
url = endpoint,
|
||||||
|
source = source,
|
||||||
|
sink = ltn12.sink.table(respbody)
|
||||||
|
}
|
||||||
|
if not _M.codes[respcode] then
|
||||||
|
return false, 'Request error. Code: '..respcode
|
||||||
|
end
|
||||||
|
if respbody then
|
||||||
|
respbody = table.concat(respbody)
|
||||||
|
ok,err = pcall(json.decode,respbody)
|
||||||
|
if not ok then
|
||||||
|
return false, 'Invalid nchan response'
|
||||||
|
end
|
||||||
|
_M.info = json.decode(respbody)
|
||||||
|
end
|
||||||
|
return true, _M.codes[respcode]
|
||||||
|
end
|
||||||
|
|
||||||
|
return _M
|
||||||
19
tests/test.lua
Executable file
19
tests/test.lua
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
local channel = require('nchan.channel')
|
||||||
|
|
||||||
|
channel.nchan.host = 'http://localhost'
|
||||||
|
channel.nchan.endpoint = 'pub'
|
||||||
|
|
||||||
|
result,msg = channel.status()
|
||||||
|
print(result)
|
||||||
|
print(msg.messages)
|
||||||
|
print(msg.requested)
|
||||||
|
print(msg.subscribers)
|
||||||
|
print(msg.last_message_id)
|
||||||
|
|
||||||
|
result,msg = channel.publish('test')
|
||||||
|
print(result)
|
||||||
|
print(channel.nchan.info.messages)
|
||||||
|
print(channel.nchan.info.requested)
|
||||||
|
print(channel.nchan.info.subscribers)
|
||||||
|
print(channel.nchan.info.last_message_id)
|
||||||
|
|
||||||
1
tests/tests.sh
Normal file
1
tests/tests.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
curl --request POST --data "test message" -H "Accept: text/json" http://localhost/pub
|
||||||
Loading…
x
Reference in New Issue
Block a user