diff options
| author | rebecca <ubq323@ubq323.website> | 2026-09-12 18:30:08 +0100 |
|---|---|---|
| committer | rebecca <ubq323@ubq323.website> | 2026-09-12 18:33:50 +0100 |
| commit | 085040f49cc1386b294857aa68651329b0044420 (patch) | |
| tree | 5d9a5e7d011e384ae1ca36a64be4f4eaca9f8ca0 /pylon.lua | |
| parent | fa9da79c39f62439ece735ed0e7dfe4c4c9692b2 (diff) | |
refactor classes and inheritance
Diffstat (limited to 'pylon.lua')
| -rw-r--r-- | pylon.lua | 65 |
1 files changed, 19 insertions, 46 deletions
@@ -1,55 +1,28 @@ -local cqueues = require 'cqueues' -local Queue = require 'queue' - --- commonality between the different pylon classes --- they can "inherit" from this +local cqueues = require'cqueues' -local BasePylon = {} +local class = require 'r.class' +local qw = require 'r.qw' +local Queue = require 'queue' -function BasePylon.check_config(self, vars) - for x in vars:gmatch"%S+" do - assert(self[x], "missing conf field "..x) - end -end +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:_connect() self.cq:wrap(self.recving, self) self.cq:wrap(self.sending, self) - print(self.pylon_type, self.cq:loop()) -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 - -local function subclass(pylon_type) - local Subclass = {} - setmetatable(Subclass, {__index=BasePylon}) - Subclass.pylon_type = pylon_type - - Subclass.make = function(wilson, conf) - local self = setmetatable(conf, {__index=Subclass}) - for k,v in pairs { - wilson = wilson, - inbox = Queue.make(), - } do self[k] = v end - - self:init(wilson, conf) - return self - end - - return Subclass -end + print(self.name, self.cq:loop()) end +return BasePylon -return { - BasePylon = BasePylon, - subclass = subclass, -} |
