TTErr TTProtocol::setApplicationParameters(TTSymbol parameterName, const TTValue& value) { TTValue v; TTHashPtr parameters; if (!mApplicationParameters.lookup(mSelectedApplication, v)) { parameters = TTHashPtr((TTPtr)v[0]); if (!parameters->lookup(parameterName, v)) { parameters->remove(parameterName); return parameters->append(parameterName, value); } } return kTTErrGeneric; }
TTErr TTProtocol::ApplicationRegister(const TTValue& inputValue, TTValue& outputValue) { TTObject application; TTSymbol parameterName; TTHashPtr applicationParameters; TTValue v, parameterNames, out, none; TTErr err; // update local application name mApplicationManager.get("applicationLocalName", v); mLocalApplicationName = v[0]; if (inputValue.size() == 1) { if (inputValue[0].type() == kTypeSymbol) { mSelectedApplication = inputValue[0]; // Check the application is not already registered err = mApplicationParameters.lookup(mSelectedApplication, v); if (err) { applicationParameters = new TTHash(); // prepare parameters table this->getParameterNames(parameterNames); for (TTUInt32 i = 0; i < parameterNames.size(); i++) { parameterName = parameterNames[i]; applicationParameters->append(parameterName, none); } // add the parameters table into mApplicationParameters v = TTValue((TTPtr)applicationParameters); mApplicationParameters.append(mSelectedApplication, v); // optionnaly format the application type depending on the protocol features // (if the application is already registered into the application manager) err = mApplicationManager.send("ApplicationFind", mSelectedApplication, out); if (!err) { application = out[0]; // for none local application if (mSelectedApplication != mLocalApplicationName) { // setup the application type depending of the discovering feature of the protocol if (mDiscover || mDiscoverAll) application.set("type", kTTSym_mirror); else application.set("type", kTTSym_proxy); } } return kTTErrNone; } } } return kTTErrGeneric; }