I have a Middleman and a Messenger class. The Middleman is on the server. The Messenger is on the client.
But for some reason, it will not work. The client can recieve calls, but cannot send them.
Middleman class:
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- a class stores server data, can be requested and stored.
local Middleman = {}
Middleman.__index = Middleman
function Middleman.new(maxWait)
local self = setmetatable({}, Middleman)
self.data = {}
self.maxWait = maxWait or 5;
--self.waitingFor = {}
self.logger = require(script.Parent.Logger).new()
self.RawCalled = Instance.new("BindableEvent")
self.Called = self.RawCalled.Event
-- Players.PlayerAdded:Connect(function(x)
-- self.waitingFor[x.UserId] = {}
-- end)
return self
end
function Middleman:Keep(x, y)
self.data[x] = y
self.logger.info("MMan", "Stored " .. x .. " as " .. y)
return self;
end
function Middleman:Request(x)
self.logger.info("MMan", "Sent " .. x)
return self.data[x];
end
function Middleman:Discard(x)
self.logger.info("MMan", "Discarded " .. x)
self.data[x] = nil;
end
function Middleman:Call(x, ...)
self.logger.info("MMan", "Fired " .. x)
self.RawCalled:Fire(x, ...)
end
function Middleman:On(x, callback)
self.Called:Connect(function(name, ...)
if name == x then
self.logger.info("MMan", "Contacted by " .. x)
return callback(...)
end
end)
end
function Middleman:AskClient(player, name, ...)
local Mote = ReplicatedStorage:FindFirstChild("Events").Middleman;
Mote:InvokeClient(player, name, ...)
--self.logger.info("MMan", "Asked " .. x.Name .. " to " .. y)
--table.insert(self.waitingFor[x.UserId], y)
end
function Middleman:OnClientResponse(x, y, callback)
local Mote = ReplicatedStorage:FindFirstChild("Events").Middleman;
-- args
Mote.OnServerInvoke = function(plr, ...)
if plr.Name == x.Name then
self.logger.info("MMan", "Contacted by " .. x.Name .. " to " .. y)
local res = callback(...)
print(...)
return res
end
end
end
return Middleman;
Messenger class:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- responds from requests from middleman
local Messenger = {}
Messenger.__index = Messenger
function Messenger.new()
local self = setmetatable({}, Messenger)
self.logger = require(script.Parent.Logger).new()
return self;
end
function Messenger:OnRequest(x, callback)
local Mote = ReplicatedStorage:FindFirstChild("Events").Middleman;
Mote.OnClientInvoke = function(name, ...)
if name == x then
return callback(...)
end
end
end
function Messenger:Ask(y, ...)
local Mote = ReplicatedStorage:FindFirstChild("Events").Middleman;
Mote:InvokeServer(y, ...)
self.logger.info("Messenger", "Asked MMan to " .. y)
end
return Messenger;