From 085040f49cc1386b294857aa68651329b0044420 Mon Sep 17 00:00:00 2001 From: rebecca Date: Sat, 12 Sep 2026 18:30:08 +0100 Subject: refactor classes and inheritance --- pylon.lua | 65 +++++++++++++++++++-------------------------------------------- 1 file changed, 19 insertions(+), 46 deletions(-) (limited to 'pylon.lua') diff --git a/pylon.lua b/pylon.lua index 774395f..02c9b2d 100644 --- a/pylon.lua +++ b/pylon.lua @@ -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, -} -- cgit v1.2.3