131 lines
3.6 KiB
Lua
131 lines
3.6 KiB
Lua
local pairs = pairs
|
|
|
|
local port = require "oil.port"
|
|
local component = require "oil.component"
|
|
local arch = require "oil.arch"
|
|
local base = require "oil.arch.typed"
|
|
local sysex = require "oil.corba.idl.sysex" --[[VERBOSE]] local verbose = require "oil.verbose"
|
|
|
|
module "oil.arch.corba"
|
|
|
|
-- TYPES
|
|
TypeRepository = component.Template({
|
|
registry = port.Facet,
|
|
indexer = port.Facet,
|
|
compiler = port.Facet,
|
|
delegated = port.Receptacle,
|
|
}, base.TypeRepository)
|
|
|
|
-- MARSHALING
|
|
ValueEncoder = component.Template{
|
|
codec = port.Facet,
|
|
proxies = port.Receptacle,
|
|
objects = port.Receptacle,
|
|
profiler = port.HashReceptacle,
|
|
}
|
|
|
|
-- REFERENCES
|
|
ReferenceProfiler = component.Template{
|
|
profiler = port.Facet,
|
|
codec = port.Receptacle,
|
|
}
|
|
ObjectReferrer = component.Template{
|
|
references = port.Facet,
|
|
codec = port.Receptacle,
|
|
types = port.Receptacle,
|
|
profiler = port.HashReceptacle,
|
|
}
|
|
|
|
-- MESSENGER
|
|
MessageMarshaler = component.Template{
|
|
messenger = port.Facet,
|
|
codec = port.Receptacle,
|
|
}
|
|
|
|
-- REQUESTER
|
|
OperationRequester = component.Template{
|
|
requests = port.Facet,
|
|
messenger = port.Receptacle,
|
|
channels = port.HashReceptacle,
|
|
profiler = port.HashReceptacle,
|
|
mutex = port.Receptacle,
|
|
}
|
|
ProxyIndexer = component.Template{
|
|
indexer = port.Facet,
|
|
members = port.Receptacle,
|
|
invoker = port.Receptacle,
|
|
profiler = port.HashReceptacle,
|
|
types = port.Receptacle,
|
|
}
|
|
|
|
-- LISTENER
|
|
RequestListener = component.Template{
|
|
listener = port.Facet,
|
|
messenger = port.Receptacle,
|
|
channels = port.HashReceptacle,
|
|
indexer = port.Receptacle,
|
|
mutex = port.Receptacle,
|
|
}
|
|
ServantIndexer = component.Template{
|
|
indexer = port.Facet,
|
|
mapper = port.Facet,
|
|
members = port.Receptacle,
|
|
}
|
|
|
|
function assemble(components)
|
|
arch.start(components)
|
|
|
|
-- GIOP MAPPINGS
|
|
local IOPClientChannels = { [0] = ClientChannels }
|
|
local IOPServerChannels = { [0] = ServerChannels }
|
|
local ReferenceProfilers = {
|
|
[0] = IIOPProfiler,
|
|
[""] = IIOPProfiler,
|
|
iiop = IIOPProfiler,
|
|
}
|
|
|
|
-- IDL DEFINITIONS
|
|
TypeRepository.types:register(sysex)
|
|
|
|
-- MARSHALING
|
|
ValueEncoder.proxies = ClientBroker.broker
|
|
ValueEncoder.objects = ServerBroker.broker
|
|
MessageMarshaler.codec = ValueEncoder.codec
|
|
|
|
-- REQUESTER
|
|
OperationRequester.messenger = MessageMarshaler.messenger
|
|
OperationRequester.mutex = OperationInvoker.mutex
|
|
ProxyIndexer.members = TypeRepository.indexer
|
|
ProxyIndexer.invoker = OperationInvoker.invoker
|
|
ProxyIndexer.types = TypeRepository.types
|
|
|
|
-- LISTENER
|
|
RequestListener.messenger = MessageMarshaler.messenger
|
|
RequestListener.indexer = ServantIndexer.indexer
|
|
RequestListener.mutex = RequestReceiver.mutex
|
|
ServantIndexer.members = TypeRepository.indexer
|
|
|
|
-- COMMUNICATION
|
|
for tag, ClientChannels in pairs(IOPClientChannels) do
|
|
ClientChannels.sockets = BasicSystem.sockets
|
|
OperationRequester.channels[tag] = ClientChannels.channels
|
|
end
|
|
for tag, ServerChannels in pairs(IOPServerChannels) do
|
|
ServerChannels.sockets = BasicSystem.sockets
|
|
RequestListener.channels[tag] = ServerChannels.channels
|
|
end
|
|
|
|
-- REFERENCES
|
|
ObjectReferrer.codec = ValueEncoder.codec
|
|
ObjectReferrer.types = ServantIndexer.indexer
|
|
for tag, ReferenceProfiler in pairs(ReferenceProfilers) do
|
|
ReferenceProfiler.codec = ValueEncoder.codec
|
|
ValueEncoder.profiler[tag] = ReferenceProfiler.profiler
|
|
ObjectReferrer.profiler[tag] = ReferenceProfiler.profiler
|
|
OperationRequester.profiler[tag] = ReferenceProfiler.profiler
|
|
ProxyIndexer.profiler[tag] = ReferenceProfiler.profiler
|
|
end
|
|
|
|
arch.finish(components)
|
|
end
|