-- Compiled with roblox-ts v1.2.7
local TS = _G[script]
local _services = TS.import(script, TS.getModule(script, "@rbxts", "services"))
local Players = _services.Players
local RunService = _services.RunService
local InstanceFactory = TS.import(script, script.Parent.Parent, "factories", "InstanceFactory").InstanceFactory
local ServerSignalSender
do
	ServerSignalSender = setmetatable({}, {
		__tostring = function()
			return "ServerSignalSender"
		end,
	})
	ServerSignalSender.__index = ServerSignalSender
	function ServerSignalSender.new(...)
		local self = setmetatable({}, ServerSignalSender)
		return self:constructor(...) or self
	end
	function ServerSignalSender:constructor(description, instanceFactory, parent)
		if not RunService:IsServer() then
			error("Attempt to create a ServerSignalSender from client")
		end
		local remoteEventCandidate = parent:FindFirstChild(description.name)
		if remoteEventCandidate ~= nil and remoteEventCandidate:IsA("RemoteEvent") then
			self.remoteEvent = remoteEventCandidate
		else
			local newRemoteEvent = instanceFactory:createInstance("RemoteEvent")
			newRemoteEvent.Name = description.name
			newRemoteEvent.Parent = parent
			self.remoteEvent = newRemoteEvent
		end
	end
	function ServerSignalSender:create(parent, description)
		return ServerSignalSender.new(description, InstanceFactory.new(), parent)
	end
	function ServerSignalSender:destroy()
		self.remoteEvent:Destroy()
	end
	function ServerSignalSender:fireToPlayer(player, ...)
		local args = { ... }
		self.remoteEvent:FireClient(player, unpack(args))
	end
	function ServerSignalSender:fireToAll(...)
		local args = { ... }
		self.remoteEvent:FireAllClients(unpack(args))
	end
	function ServerSignalSender:fireToWhitelist(playersWhitelist, ...)
		local args = { ... }
		local _arg0 = function(player)
			return self.remoteEvent:FireClient(player, unpack(args))
		end
		-- ▼ ReadonlyArray.forEach ▼
		for _k, _v in ipairs(playersWhitelist) do
			_arg0(_v, _k - 1, playersWhitelist)
		end
		-- ▲ ReadonlyArray.forEach ▲
	end
	function ServerSignalSender:fireToOthers(playersBlacklist, ...)
		local args = { ... }
		local _set = {}
		for _, _v in ipairs(playersBlacklist) do
			_set[_v] = true
		end
		local playersBlacklistSet = _set
		local _exp = Players:GetPlayers()
		local _arg0 = function(player)
			return not (playersBlacklistSet[player] ~= nil)
		end
		-- ▼ ReadonlyArray.filter ▼
		local _newValue = {}
		local _length = 0
		for _k, _v in ipairs(_exp) do
			if _arg0(_v, _k - 1, _exp) == true then
				_length += 1
				_newValue[_length] = _v
			end
		end
		-- ▲ ReadonlyArray.filter ▲
		local _arg0_1 = function(player)
			return self.remoteEvent:FireClient(player, unpack(args))
		end
		-- ▼ ReadonlyArray.forEach ▼
		for _k, _v in ipairs(_newValue) do
			_arg0_1(_v, _k - 1, _newValue)
		end
		-- ▲ ReadonlyArray.forEach ▲
	end
end
return {
	ServerSignalSender = ServerSignalSender,
}
