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