@@ -585,6 +585,7 @@ using namespace ProxyHost;
585585
586586std::vector<const ARAFactory*> _factories {};
587587ARAIPCMessageSender _plugInCallbacksSender {};
588+ ARAIPCBindingHandler _bindingHandler {};
588589
589590void ARAIPCProxyHostAddFactory (const ARAFactory* factory)
590591{
@@ -599,19 +600,14 @@ void ARAIPCProxyHostSetPlugInCallbacksSender (ARAIPCMessageSender plugInCallback
599600 _plugInCallbacksSender = plugInCallbacksSender;
600601}
601602
602- ARADocumentControllerRef ARAIPCProxyHostTranslateDocumentControllerRef (ARADocumentControllerRef remoteRef )
603+ void ARAIPCProxyHostSetBindingHandler (ARAIPCBindingHandler handler )
603604{
604- return fromRef (remoteRef)-> getRef () ;
605+ _bindingHandler = handler ;
605606}
606607
607- ARAPlugInExtensionRef ARAIPCProxyHostCreatePlugInExtension (const ARAPlugInExtensionInstance* instance )
608+ void ARAIPCProxyHostCleanupBinding (const ARA:: ARAPlugInExtensionInstance* plugInExtensionInstance )
608609{
609- return toRef (new PlugInExtension { instance });
610- }
611-
612- void ARAIPCProxyHostDestroyPlugInExtension (ARAPlugInExtensionRef plugInExtensionRef)
613- {
614- delete fromRef (plugInExtensionRef);
610+ delete fromRef (plugInExtensionInstance->plugInExtensionRef );
615611}
616612
617613void ARAIPCProxyHostCommandHandler (const ARAIPCMessageID messageID, const ARAIPCMessageDecoder* const decoder, ARAIPCMessageEncoder* const replyEncoder)
@@ -677,6 +673,16 @@ void ARAIPCProxyHostCommandHandler (const ARAIPCMessageID messageID, const ARAIP
677673 return encodeReply (replyEncoder, ARADocumentControllerRef { toRef (documentController) });
678674 }
679675 }
676+ else if (messageID == kBindToDocumentControllerMessageID )
677+ {
678+ ARAIPCPlugInInstanceRef plugInInstanceRef;
679+ ARADocumentControllerRef controllerRef;
680+ ARAPlugInInstanceRoleFlags knownRoles;
681+ ARAPlugInInstanceRoleFlags assignedRoles;
682+ decodeArguments (decoder, plugInInstanceRef, controllerRef, knownRoles, assignedRoles);
683+ const auto plugInExtensionInstance { _bindingHandler (plugInInstanceRef, fromRef (controllerRef)->getRef (), knownRoles, assignedRoles) };
684+ return encodeReply (replyEncoder, ARAPlugInExtensionRef { toRef (new PlugInExtension { plugInExtensionInstance })});
685+ }
680686
681687 // ARADocumentControllerInterface
682688 else if (messageID == ARA_IPC_PLUGIN_METHOD_ID (ARADocumentControllerInterface, destroyDocumentController))
0 commit comments