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