68 lines
1.7 KiB
Lua
68 lines
1.7 KiB
Lua
local oo = require "oil.oo"
|
|
|
|
Collector = oo.class{}
|
|
|
|
function Collector:__init()
|
|
return oo.rawnew(self, { emails = {} })
|
|
end
|
|
|
|
local MailSent = {}
|
|
function Collector:send_to(email)
|
|
assert(type(email) == "string", "attempt to send message to address "..tostring(email))
|
|
assert(string.find(email, ".+@.+"), "attempt to send message to address "..tostring(email))
|
|
if MailSent[email]
|
|
then io.write(" ", email, " got ", MailSent[email], " duplicates ")
|
|
else io.write(".")
|
|
end
|
|
MailSent[email] = (MailSent[email] or 0) + 1
|
|
end
|
|
|
|
function Collector:request_mail()
|
|
print("\n=== Start mail session ========================")
|
|
MailSent = {}
|
|
end
|
|
|
|
function Collector:submit(paper)
|
|
self:request_mail()
|
|
for _, email in ipairs(self.emails) do
|
|
self:send_to(email, "New paper submitted")
|
|
end
|
|
for _, author in ipairs(paper.authors) do
|
|
table.insert(self.emails, author.email)
|
|
end
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
require "oil"
|
|
oil.main(function()
|
|
require "adaptor"
|
|
|
|
orb:loadidl[[
|
|
struct Author {
|
|
string name;
|
|
string email;
|
|
};
|
|
typedef sequence<Author> AuthorSeq;
|
|
struct Paper {
|
|
string title;
|
|
AuthorSeq authors;
|
|
};
|
|
interface Collector {
|
|
void submit(in Paper paper);
|
|
};
|
|
]]
|
|
|
|
local c1 = orb:newservant(Collector(), nil, "Collector")
|
|
local c2 = orb:newservant(Collector(), nil, "Collector")
|
|
local c3 = orb:newservant(Collector(), nil, "Collector")
|
|
local adaptor = orb:newservant(Adaptor("Collector"), nil, "ComponentAdaptor")
|
|
|
|
oil.writeto("c1.ior" , orb:tostring(c1))
|
|
oil.writeto("c2.ior" , orb:tostring(c2))
|
|
oil.writeto("c3.ior" , orb:tostring(c3))
|
|
oil.writeto("adaptor.ior", orb:tostring(adaptor))
|
|
|
|
orb:run()
|
|
end)
|