summaryrefslogtreecommitdiff
path: root/pylon.lua
blob: 9d4a02d90b871c05eacaed2f9485e06c3103fd22 (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
33
local cqueues = require'cqueues'
local pprint = require 'pprint'
local class = require 'r.class'
local qw = require 'r.qw'

local Queue = require 'queue'
local Log = require'log'

local BasePylon = class()

function BasePylon.make(cls, wilson, conf)
	local self = setmetatable(conf, cls)
	self.wilson = wilson
	self.inbox = Queue()
	self.log = Log(self.name,self.loglevel)
	self:_check_fields"shortname"
	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.run(self)
	self.cq = cqueues.new()
	self.cq:wrap(function()
		self:_connect()
		self.log"connected!"
		self.cq:wrap(self.recving, self)
		self.cq:wrap(self.sending, self)
	end)
	self.log:loop(self.cq)
end
return BasePylon