Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.joynr.generator.cpp.inprocess.InterfaceInProcessConnectorCPPTemplate Maven / Gradle / Ivy
package io.joynr.generator.cpp.inprocess;
import com.google.inject.Inject;
import io.joynr.generator.cpp.util.CppStdTypeUtil;
import io.joynr.generator.cpp.util.JoynrCppGeneratorExtensions;
import io.joynr.generator.cpp.util.QtTypeUtil;
import io.joynr.generator.cpp.util.TemplateBase;
import io.joynr.generator.util.InterfaceTemplate;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.franca.core.franca.FArgument;
import org.franca.core.franca.FAttribute;
import org.franca.core.franca.FBroadcast;
import org.franca.core.franca.FInterface;
import org.franca.core.franca.FMethod;
import org.franca.core.franca.FType;
import org.franca.core.franca.FTypeRef;
@SuppressWarnings("all")
public class InterfaceInProcessConnectorCPPTemplate implements InterfaceTemplate {
@Inject
@Extension
private TemplateBase _templateBase;
@Inject
@Extension
private CppStdTypeUtil cppStdTypeUtil;
@Inject
private QtTypeUtil qtTypeUtil;
@Inject
@Extension
private JoynrCppGeneratorExtensions _joynrCppGeneratorExtensions;
public CharSequence generate(final FInterface serviceInterface) {
StringConcatenation _builder = new StringConcatenation();
String interfaceName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
_builder.newLineIfNotEmpty();
CharSequence _warning = this._templateBase.warning();
_builder.append(_warning, "");
_builder.newLineIfNotEmpty();
_builder.append("#include ");
_builder.newLine();
_builder.newLine();
_builder.append("#include \"");
String _packagePathWithJoynrPrefix = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
_builder.append(_packagePathWithJoynrPrefix, "");
_builder.append("/");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector.h\"");
_builder.newLineIfNotEmpty();
_builder.append("#include \"");
String _packagePathWithJoynrPrefix_1 = this._joynrCppGeneratorExtensions.getPackagePathWithJoynrPrefix(serviceInterface, "/");
_builder.append(_packagePathWithJoynrPrefix_1, "");
_builder.append("/");
_builder.append(interfaceName, "");
_builder.append("RequestCaller.h\"");
_builder.newLineIfNotEmpty();
_builder.append("#include \"joynr/DeclareMetatypeUtil.h\"");
_builder.newLine();
{
Iterable _allComplexAndEnumTypes = this._joynrCppGeneratorExtensions.getAllComplexAndEnumTypes(serviceInterface);
for(final Object datatype : _allComplexAndEnumTypes) {
{
if ((datatype instanceof FType)) {
{
boolean _isComplex = this._joynrCppGeneratorExtensions.isComplex(((FType)datatype));
if (_isComplex) {
_builder.append("#include \"");
String _includeOf = this.cppStdTypeUtil.getIncludeOf(((FType)datatype));
_builder.append(_includeOf, "");
_builder.append("\"");
_builder.newLineIfNotEmpty();
}
}
}
}
}
}
_builder.newLine();
_builder.append("#include \"joynr/InProcessAddress.h\"");
_builder.newLine();
_builder.append("#include \"joynr/ISubscriptionManager.h\"");
_builder.newLine();
_builder.append("#include \"joynr/PublicationManager.h\"");
_builder.newLine();
_builder.append("#include \"joynr/SubscriptionCallback.h\"");
_builder.newLine();
_builder.append("#include \"joynr/BroadcastSubscriptionRequest.h\"");
_builder.newLine();
_builder.append("#include \"joynr/Future.h\"");
_builder.newLine();
_builder.append("#include \"joynr/TypeUtil.h\"");
_builder.newLine();
_builder.append("#include \"joynr/RequestStatus.h\"");
_builder.newLine();
_builder.append("#include \"joynr/RequestStatusCode.h\"");
_builder.newLine();
_builder.newLine();
String _namespaceStarter = this._joynrCppGeneratorExtensions.getNamespaceStarter(serviceInterface);
_builder.append(_namespaceStarter, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("using namespace joynr::joynr_logging;");
_builder.newLine();
_builder.append("Logger* ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::logger = Logging::getInstance()->getLogger(\"MSG\", \"");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector\");");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("joynr::ISubscriptionManager* subscriptionManager,");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("joynr::PublicationManager* publicationManager,");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("joynr::InProcessPublicationSender* inProcessPublicationSender,");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("const std::string& proxyParticipantId,");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("const std::string& providerParticipantId,");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("QSharedPointer address");
_builder.newLine();
_builder.append(") :");
_builder.newLine();
_builder.append("\t");
_builder.append("proxyParticipantId(proxyParticipantId),");
_builder.newLine();
_builder.append("\t");
_builder.append("providerParticipantId(providerParticipantId),");
_builder.newLine();
_builder.append("\t");
_builder.append("address(address),");
_builder.newLine();
_builder.append("\t");
_builder.append("subscriptionManager(subscriptionManager),");
_builder.newLine();
_builder.append("\t");
_builder.append("publicationManager(publicationManager),");
_builder.newLine();
_builder.append("\t");
_builder.append("inProcessPublicationSender(inProcessPublicationSender)");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("bool ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::usesClusterController() const{");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return false;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
EList _attributes = this._joynrCppGeneratorExtensions.getAttributes(serviceInterface);
for(final FAttribute attribute : _attributes) {
final String returnType = this.cppStdTypeUtil.getTypeName(attribute);
_builder.newLineIfNotEmpty();
final String returnTypeQt = this.qtTypeUtil.getTypeName(attribute);
_builder.newLineIfNotEmpty();
final String attributeName = this._joynrCppGeneratorExtensions.joynrName(attribute);
_builder.newLineIfNotEmpty();
String _joynrName = this._joynrCppGeneratorExtensions.joynrName(attribute);
String _firstUpper = StringExtensions.toFirstUpper(_joynrName);
final String setAttributeName = ("set" + _firstUpper);
_builder.newLineIfNotEmpty();
{
boolean _isReadable = this._joynrCppGeneratorExtensions.isReadable(attribute);
if (_isReadable) {
String _joynrName_1 = this._joynrCppGeneratorExtensions.joynrName(attribute);
String _firstUpper_1 = StringExtensions.toFirstUpper(_joynrName_1);
final String getAttributeName = ("get" + _firstUpper_1);
_builder.newLineIfNotEmpty();
_builder.append("joynr::RequestStatus ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(getAttributeName, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append(returnType, "\t\t\t");
_builder.append("& attributeValue");
_builder.newLineIfNotEmpty();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_1 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_1, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer > future(new joynr::Future<");
_builder.append(returnType, "\t");
_builder.append(">());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccess =");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("[future] (const ");
_builder.append(returnType, "\t\t\t");
_builder.append("& ");
_builder.append(attributeName, "\t\t\t");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess(");
_builder.append(attributeName, "\t\t\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("//see header for more information");
_builder.newLine();
_builder.append("\t");
String _interfaceCaller_2 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_2, "\t");
_builder.append("->");
_builder.append(getAttributeName, "\t");
_builder.append("(onSuccess);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("joynr::RequestStatus status(future->waitForFinished());");
_builder.newLine();
_builder.append("\t");
_builder.append("if (status.successful()) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("future->getValues(attributeValue);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return status;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("std::shared_ptr> ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(getAttributeName, "");
_builder.append("Async(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::function onSuccess,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::function onError");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("std::ignore = onError; // not used yet");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller_3 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_3, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_4 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_4, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::shared_ptr > future(new joynr::Future<");
_builder.append(returnType, "\t");
_builder.append(">());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccessWrapper =");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("[future, onSuccess] (const ");
_builder.append(returnType, "\t\t\t");
_builder.append("& ");
_builder.append(attributeName, "\t\t\t");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess(");
_builder.append(attributeName, "\t\t\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("if (onSuccess) {");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("onSuccess(");
_builder.append(attributeName, "\t\t\t\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("//see header for more information");
_builder.newLine();
_builder.append("\t");
String _interfaceCaller_5 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_5, "\t");
_builder.append("->");
_builder.append(getAttributeName, "\t");
_builder.append("(onSuccessWrapper);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return future;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
{
boolean _isWritable = this._joynrCppGeneratorExtensions.isWritable(attribute);
if (_isWritable) {
_builder.append("std::shared_ptr> ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(setAttributeName, "");
_builder.append("Async(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append(returnType, "\t\t");
_builder.append(" input,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::function onSuccess,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("std::function onError");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("std::ignore = onError; // not used yet");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller_6 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_6, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_7 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_7, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::shared_ptr> future(new joynr::Future());");
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccessWrapper =");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("[future, onSuccess] () {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess();");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("if (onSuccess) {");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("onSuccess();");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("//see header for more information");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_ERROR(logger,\"#### WARNING ##### ");
_builder.append(interfaceName, "\t");
_builder.append("InProcessConnector::");
_builder.append(setAttributeName, "\t");
_builder.append("(Future) is synchronous.\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _interfaceCaller_8 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_8, "\t");
_builder.append("->");
_builder.append(setAttributeName, "\t");
_builder.append("(input, onSuccessWrapper);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return future;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("joynr::RequestStatus ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(setAttributeName, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const ");
_builder.append(returnType, "\t\t");
_builder.append("& input");
_builder.newLineIfNotEmpty();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller_9 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_9, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_10 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_10, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer> future(new joynr::Future());");
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccess =");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("[future] () {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess();");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("//see header for more information");
_builder.newLine();
_builder.append("\t");
String _interfaceCaller_11 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_11, "\t");
_builder.append("->");
_builder.append(setAttributeName, "\t");
_builder.append("(input, onSuccess);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return future->waitForFinished();");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
{
boolean _isNotifiable = this._joynrCppGeneratorExtensions.isNotifiable(attribute);
if (_isNotifiable) {
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_2 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_2, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::SubscriptionQos& subscriptionQos,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("std::string& subscriptionId)");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("joynr::SubscriptionRequest subscriptionRequest;");
_builder.newLine();
_builder.append("\t");
_builder.append("subscriptionRequest.setSubscriptionId(QString::fromStdString(subscriptionId));");
_builder.newLine();
_builder.append("\t");
_builder.append("return subscribeTo");
String _firstUpper_3 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_3, "\t");
_builder.append("(subscriptionListener, subscriptionQos, subscriptionRequest);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_4 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_4, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::SubscriptionQos& subscriptionQos)");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("joynr::SubscriptionRequest subscriptionRequest;");
_builder.newLine();
_builder.append("\t");
_builder.append("return subscribeTo");
String _firstUpper_5 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_5, "\t");
_builder.append("(subscriptionListener, subscriptionQos, subscriptionRequest);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_6 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_6, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::SubscriptionQos& subscriptionQos,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("joynr::SubscriptionRequest& subscriptionRequest)");
_builder.newLine();
_builder.append("{");
_builder.newLine();
{
FTypeRef _type = attribute.getType();
boolean _isEnum = this._joynrCppGeneratorExtensions.isEnum(_type);
if (_isEnum) {
_builder.append("\t");
_builder.append("Q_UNUSED(subscriptionListener);");
_builder.newLine();
_builder.append("\t");
_builder.append("Q_UNUSED(subscriptionQos);");
_builder.newLine();
_builder.append("\t");
_builder.append("// TODO support enum return values in C++ client");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_FATAL(logger, \"enum return values are currently not supported in C++ client (attribute name: ");
_builder.append(interfaceName, "\t");
_builder.append(".");
_builder.append(attributeName, "\t");
_builder.append(")\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(false);");
_builder.newLine();
_builder.append("\t");
_builder.append("// Visual C++ requires a return value");
_builder.newLine();
_builder.append("\t");
_builder.append("return std::string();");
_builder.newLine();
} else {
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Subscribing to ");
_builder.append(attributeName, "\t");
_builder.append(".\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(subscriptionManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("QString attributeName(\"");
_builder.append(attributeName, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("QSharedPointer> subscriptionCallback(");
_builder.newLineIfNotEmpty();
{
boolean _needsDatatypeConversion = this.qtTypeUtil.needsDatatypeConversion(attribute);
if (_needsDatatypeConversion) {
_builder.append("\t");
_builder.append("\t\t");
_builder.append("new ");
String _joynrName_2 = this._joynrCppGeneratorExtensions.joynrName(attribute);
String _firstUpper_7 = StringExtensions.toFirstUpper(_joynrName_2);
_builder.append(_firstUpper_7, "\t\t\t");
_builder.append("AttributeSubscriptionCallbackWrapper(");
_builder.newLineIfNotEmpty();
} else {
_builder.append("\t");
_builder.append("\t\t");
_builder.append("new joynr::SubscriptionCallback<");
_builder.append(returnTypeQt, "\t\t\t");
_builder.append(">(");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.append("\t\t\t\t");
_builder.append("subscriptionListener");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append(")");
_builder.newLine();
_builder.append("\t");
_builder.append(");");
_builder.newLine();
_builder.append("\t");
_builder.append("subscriptionManager->registerSubscription(");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("attributeName,");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("subscriptionCallback,");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("QSharedPointer(QtSubscriptionQos::createQt(subscriptionQos)),");
_builder.newLine();
_builder.append("\t");
_builder.append("\t\t");
_builder.append("subscriptionRequest);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Registered subscription: \" + subscriptionRequest.toQString());");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> requestCaller = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("std::string subscriptionId(subscriptionRequest.getSubscriptionId().toStdString());");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("if(caller.isNull()) {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("assert(publicationManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("/**");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("* Provider not registered yet");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("* Dispatcher will call publicationManger->restore when a new provider is added to activate");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("* subscriptions for that provider");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("*/");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), subscriptionRequest);");
_builder.newLine();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), caller, subscriptionRequest, inProcessPublicationSender);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return subscriptionId;");
_builder.newLine();
}
}
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("void ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::unsubscribeFrom");
String _firstUpper_8 = StringExtensions.toFirstUpper(attributeName);
_builder.append(_firstUpper_8, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::string& subscriptionId");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
{
FTypeRef _type_1 = attribute.getType();
boolean _isEnum_1 = this._joynrCppGeneratorExtensions.isEnum(_type_1);
if (_isEnum_1) {
_builder.append("\t");
_builder.append("Q_UNUSED(subscriptionId);");
_builder.newLine();
_builder.append("\t");
_builder.append("// TODO support enum return values in C++ client");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_FATAL(logger, \"enum return values are currently not supported in C++ client (attribute name: ");
_builder.append(interfaceName, "\t");
_builder.append(".");
_builder.append(attributeName, "\t");
_builder.append(")\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(false);");
_builder.newLine();
} else {
_builder.append("\t");
_builder.append("QString subscriptionIdQT(QString::fromStdString(subscriptionId));");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Unsubscribing. Id=\" +subscriptionIdQT);");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(publicationManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Stopping publications by publication manager.\");");
_builder.newLine();
_builder.append("\t");
_builder.append("publicationManager->stopPublication(subscriptionIdQT);");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(subscriptionManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Unregistering attribute subscription.\");");
_builder.newLine();
_builder.append("\t");
_builder.append("subscriptionManager->unregisterSubscription(subscriptionIdQT);");
_builder.newLine();
}
}
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
}
}
_builder.newLine();
{
EList _methods = this._joynrCppGeneratorExtensions.getMethods(serviceInterface);
for(final FMethod method : _methods) {
String methodname = this._joynrCppGeneratorExtensions.joynrName(method);
_builder.newLineIfNotEmpty();
String inputTypedParamList = this.cppStdTypeUtil.getCommaSeperatedTypedConstInputParameterList(method);
_builder.newLineIfNotEmpty();
String outputParameters = this.cppStdTypeUtil.getCommaSeparatedOutputParameterTypes(method);
_builder.newLineIfNotEmpty();
String inputParamList = this.cppStdTypeUtil.getCommaSeperatedUntypedInputParameterList(method);
_builder.newLineIfNotEmpty();
String outputTypedConstParamList = this.cppStdTypeUtil.getCommaSeperatedTypedConstOutputParameterList(method);
_builder.newLineIfNotEmpty();
String outputTypedParamList = this.cppStdTypeUtil.getCommaSeperatedTypedOutputParameterList(method);
_builder.newLineIfNotEmpty();
String outputUntypedParamList = this.cppStdTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("joynr::RequestStatus ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(methodname, "");
_builder.append("(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append(outputTypedParamList, "\t\t");
{
boolean _and = false;
Iterable _outputParameters = this._joynrCppGeneratorExtensions.getOutputParameters(method);
int _size = IterableExtensions.size(_outputParameters);
boolean _greaterThan = (_size > 0);
if (!_greaterThan) {
_and = false;
} else {
Iterable _inputParameters = this._joynrCppGeneratorExtensions.getInputParameters(method);
int _size_1 = IterableExtensions.size(_inputParameters);
boolean _greaterThan_1 = (_size_1 > 0);
_and = _greaterThan_1;
}
if (_and) {
_builder.append(", ");
}
}
_builder.append(inputTypedParamList, "\t\t");
_builder.newLineIfNotEmpty();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller_12 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_12, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_13 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_13, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("QSharedPointer > future(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("new joynr::Future<");
_builder.append(outputParameters, "\t\t\t");
_builder.append(">());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccess =");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("[future] (");
_builder.append(outputTypedConstParamList, "\t\t\t");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess(");
_builder.newLine();
_builder.append("\t\t\t\t\t\t");
_builder.append(outputUntypedParamList, "\t\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append(");");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
String _interfaceCaller_14 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_14, "\t");
_builder.append("->");
_builder.append(methodname, "\t");
_builder.append("(");
{
Iterable _inputParameters_1 = this._joynrCppGeneratorExtensions.getInputParameters(method);
boolean _isEmpty = IterableExtensions.isEmpty(_inputParameters_1);
boolean _not = (!_isEmpty);
if (_not) {
_builder.append(inputParamList, "\t");
_builder.append(", ");
}
}
_builder.append("onSuccess);");
_builder.newLineIfNotEmpty();
{
Iterable _outputParameters_1 = this._joynrCppGeneratorExtensions.getOutputParameters(method);
boolean _isEmpty_1 = IterableExtensions.isEmpty(_outputParameters_1);
if (_isEmpty_1) {
_builder.append("\t");
_builder.append("return future->waitForFinished();");
_builder.newLine();
} else {
_builder.append("\t");
_builder.append("joynr::RequestStatus status = future->waitForFinished();");
_builder.newLine();
_builder.append("\t");
_builder.append("if (status.successful()) {");
_builder.newLine();
_builder.append("\t");
_builder.append("\t");
_builder.append("future->getValues(");
String _commaSeperatedUntypedOutputParameterList = this.cppStdTypeUtil.getCommaSeperatedUntypedOutputParameterList(method);
_builder.append(_commaSeperatedUntypedOutputParameterList, "\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return status;");
_builder.newLine();
}
}
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("std::shared_ptr > ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::");
_builder.append(methodname, "");
_builder.append("Async(");
String _commaSeperatedTypedConstInputParameterList = this.cppStdTypeUtil.getCommaSeperatedTypedConstInputParameterList(method);
_builder.append(_commaSeperatedTypedConstInputParameterList, "");
{
Iterable _inputParameters_2 = this._joynrCppGeneratorExtensions.getInputParameters(method);
boolean _isEmpty_2 = IterableExtensions.isEmpty(_inputParameters_2);
boolean _not_1 = (!_isEmpty_2);
if (_not_1) {
_builder.append(",");
}
}
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("std::function onSuccess,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("std::function onError)");
_builder.newLine();
_builder.append("{");
_builder.newLine();
_builder.append("\t");
_builder.append("std::ignore = onError; // not used yet");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> ");
String _interfaceCaller_15 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_15, "\t");
_builder.append(" = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(!");
String _interfaceCaller_16 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_16, "\t");
_builder.append(".isNull());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("std::shared_ptr > future(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("new joynr::Future<");
_builder.append(outputParameters, "\t\t\t");
_builder.append(">());");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("std::function onSuccessWrapper =");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("[future, onSuccess] (");
_builder.append(outputTypedConstParamList, "\t\t\t");
_builder.append(") {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("future->onSuccess(");
_builder.append(outputUntypedParamList, "\t\t\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("if (onSuccess)");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("{");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("onSuccess(");
_builder.append(outputUntypedParamList, "\t\t\t\t\t");
_builder.append(");");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("};");
_builder.newLine();
_builder.append("\t");
String _interfaceCaller_17 = this.getInterfaceCaller(serviceInterface);
_builder.append(_interfaceCaller_17, "\t");
_builder.append("->");
_builder.append(methodname, "\t");
_builder.append("(");
{
Iterable _inputParameters_3 = this._joynrCppGeneratorExtensions.getInputParameters(method);
boolean _isEmpty_3 = IterableExtensions.isEmpty(_inputParameters_3);
boolean _not_2 = (!_isEmpty_3);
if (_not_2) {
_builder.append(inputParamList, "\t");
_builder.append(", ");
}
}
_builder.append("onSuccessWrapper);");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return future;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
}
}
_builder.newLine();
{
EList _broadcasts = serviceInterface.getBroadcasts();
for(final FBroadcast broadcast : _broadcasts) {
final String returnTypes = this.cppStdTypeUtil.getCommaSeparatedOutputParameterTypes(broadcast);
_builder.newLineIfNotEmpty();
final String returnTypesQt = this.qtTypeUtil.getCommaSeparatedOutputParameterTypes(broadcast);
_builder.newLineIfNotEmpty();
final String broadcastName = this._joynrCppGeneratorExtensions.joynrName(broadcast);
_builder.newLineIfNotEmpty();
_builder.newLine();
{
boolean _isSelective = this._joynrCppGeneratorExtensions.isSelective(broadcast);
if (_isSelective) {
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_9 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_9, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const ");
String _firstUpper_10 = StringExtensions.toFirstUpper(interfaceName);
_builder.append(_firstUpper_10, "\t\t");
String _firstUpper_11 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_11, "\t\t");
_builder.append("BroadcastFilterParameters& filterParameters,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos");
_builder.newLine();
} else {
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_12 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_12, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos");
_builder.newLine();
}
}
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Subscribing to ");
_builder.append(broadcastName, "\t");
_builder.append(".\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(subscriptionManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("QString broadcastName(\"");
_builder.append(broadcastName, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("joynr::BroadcastSubscriptionRequest subscriptionRequest;");
_builder.newLine();
{
boolean _isSelective_1 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
if (_isSelective_1) {
_builder.append("\t");
_builder.append("subscriptionRequest.setFilterParameters(QtBroadcastFilterParameters::createQt(filterParameters));");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("return subscribeTo");
String _firstUpper_13 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_13, "\t");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("subscriptionListener,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionQos,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionRequest);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
{
boolean _isSelective_2 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
if (_isSelective_2) {
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_14 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_14, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const ");
String _firstUpper_15 = StringExtensions.toFirstUpper(interfaceName);
_builder.append(_firstUpper_15, "\t\t");
String _firstUpper_16 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_16, "\t\t");
_builder.append("BroadcastFilterParameters& filterParameters,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("std::string& subscriptionId");
_builder.newLine();
} else {
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_17 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_17, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("std::string& subscriptionId");
_builder.newLine();
}
}
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("joynr::BroadcastSubscriptionRequest subscriptionRequest;");
_builder.newLine();
{
boolean _isSelective_3 = this._joynrCppGeneratorExtensions.isSelective(broadcast);
if (_isSelective_3) {
_builder.append("\t");
_builder.append("subscriptionRequest.setFilterParameters(QtBroadcastFilterParameters::createQt(filterParameters));");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("subscriptionRequest.setSubscriptionId(QString::fromStdString(subscriptionId));");
_builder.newLine();
_builder.append("\t");
_builder.append("return subscribeTo");
String _firstUpper_18 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_18, "\t");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("subscriptionListener,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionQos,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionRequest);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("std::string ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::subscribeTo");
String _firstUpper_19 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_19, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::shared_ptr > subscriptionListener,");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("const joynr::OnChangeSubscriptionQos& subscriptionQos,");
_builder.newLine();
_builder.append("\t\t");
_builder.append("joynr::BroadcastSubscriptionRequest& subscriptionRequest");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Subscribing to ");
_builder.append(broadcastName, "\t");
_builder.append(".\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("assert(subscriptionManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("QString broadcastName(\"");
_builder.append(broadcastName, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer> subscriptionCallback(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append("new ");
String _firstUpper_20 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_20, "\t\t\t\t");
_builder.append("BroadcastSubscriptionCallbackWrapper(subscriptionListener));");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("subscriptionManager->registerSubscription(");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("broadcastName,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionCallback,");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("QSharedPointer(QtSubscriptionQos::createQt(subscriptionQos)),");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("subscriptionRequest);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Registered broadcast subscription: \" + subscriptionRequest.toQString());");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!address.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer caller = address->getRequestCaller();");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(!caller.isNull());");
_builder.newLine();
_builder.append("\t");
_builder.append("QSharedPointer<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller> requestCaller = caller.dynamicCast<");
_builder.append(interfaceName, "\t");
_builder.append("RequestCaller>();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("std::string subscriptionId(subscriptionRequest.getSubscriptionId().toStdString());");
_builder.newLine();
_builder.newLine();
_builder.append("\t");
_builder.append("if(caller.isNull()) {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("assert(publicationManager != NULL);");
_builder.newLine();
_builder.append("\t\t");
_builder.append("/**");
_builder.newLine();
_builder.append("\t\t");
_builder.append("* Provider not registered yet");
_builder.newLine();
_builder.append("\t\t");
_builder.append("* Dispatcher will call publicationManger->restore when a new provider is added to activate");
_builder.newLine();
_builder.append("\t\t");
_builder.append("* subscriptions for that provider");
_builder.newLine();
_builder.append("\t\t");
_builder.append("*/");
_builder.newLine();
_builder.append("\t\t");
_builder.append("publicationManager->add(QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), subscriptionRequest);");
_builder.newLine();
_builder.append("\t");
_builder.append("} else {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("publicationManager->add(");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("QString::fromStdString(proxyParticipantId),");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("QString::fromStdString(providerParticipantId),");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("caller,");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("subscriptionRequest,");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("inProcessPublicationSender);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return subscriptionId;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("void ");
_builder.append(interfaceName, "");
_builder.append("InProcessConnector::unsubscribeFrom");
String _firstUpper_21 = StringExtensions.toFirstUpper(broadcastName);
_builder.append(_firstUpper_21, "");
_builder.append("Broadcast(");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("std::string& subscriptionId");
_builder.newLine();
_builder.append(") {");
_builder.newLine();
_builder.append("\t");
_builder.append("QString subscriptionIdQT(QString::fromStdString(subscriptionId));");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Unsubscribing broadcast. Id=\" + subscriptionIdQT);");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(publicationManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Stopping publications by publication manager.\");");
_builder.newLine();
_builder.append("\t");
_builder.append("publicationManager->stopPublication(subscriptionIdQT);");
_builder.newLine();
_builder.append("\t");
_builder.append("assert(subscriptionManager != NULL);");
_builder.newLine();
_builder.append("\t");
_builder.append("LOG_DEBUG(logger, \"Unregistering broadcast subscription.\");");
_builder.newLine();
_builder.append("\t");
_builder.append("subscriptionManager->unregisterSubscription(subscriptionIdQT);");
_builder.newLine();
_builder.append("}");
_builder.newLine();
}
}
String _namespaceEnder = this._joynrCppGeneratorExtensions.getNamespaceEnder(serviceInterface);
_builder.append(_namespaceEnder, "");
_builder.newLineIfNotEmpty();
return _builder;
}
public String getInterfaceCaller(final FInterface serviceInterface) {
String _joynrName = this._joynrCppGeneratorExtensions.joynrName(serviceInterface);
String _firstLower = StringExtensions.toFirstLower(_joynrName);
return (_firstLower + "Caller");
}
}