summaryrefslogtreecommitdiff
path: root/pylon.lua
blob: 7841f11c99cd14411473b3d1ebd12f4d9a90128b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
local cqueues = require'cqueues'
local pprint = require 'pprint'
local class = require 'r.class'
local qw = require 'r.qw'

local bs = require'bs'
local Queue = require 'queue'

local BasePylon = class()

function BasePylon.make(cls, wilson, conf)
	local self = setmetatable(conf, cls)
	self.wilson = wilson
	self.inbox = Queue()
	self:init()
	return self end
function BasePylon._check_fields(self, fields) for k in qw.i(fields) do
	assert(self[k]~=nil, self.name..": missing field "..k) end end
function BasePylon.post(self, dest_channel, message)
	self.inbox:enqueue(dest_channel, message) end
function BasePylon.log(self, ...)
	if self.debug then print(self.name, ...) end end
function BasePylon.run(self)
	self.cq = cqueues.new()
	self.cq:wrap(function()
		self:_connect()
		self.cq:wrap(self.recving, self)
		self.cq:wrap(self.sending, self)
	end)
	bs.loop_correctly(self.name, self.cq)
end
return BasePylon