summaryrefslogtreecommitdiff
path: root/pylon.lua
diff options
context:
space:
mode:
authorrebecca <ubq323@ubq323.website>2026-09-12 18:30:08 +0100
committerrebecca <ubq323@ubq323.website>2026-09-12 18:33:50 +0100
commit085040f49cc1386b294857aa68651329b0044420 (patch)
tree5d9a5e7d011e384ae1ca36a64be4f4eaca9f8ca0 /pylon.lua
parentfa9da79c39f62439ece735ed0e7dfe4c4c9692b2 (diff)
refactor classes and inheritance
Diffstat (limited to 'pylon.lua')
-rw-r--r--pylon.lua65
1 files changed, 19 insertions, 46 deletions
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,
-}