2,853
社区成员




namespace org {
namespace alljoyn {
namespace SampleDaemon {
//默认的daemon名称
const char* DefaultDaemonBusName = "org.alljoyn.BusNode.TestingPurposesOnly";
//瘦客户端认证机制(有信任方式和非信任方式)
const char* ThinClientAuthMechanism = "ALLJOYN_PIN_KEYX";
const char* ThinClientDefaultBusPwd = "1234";
}
}
}
int main(int argc, char** argv)
{
//输出alljoyn版本号及编译版本号
std::cout << "AllJoyn Library version: " << ajn::GetVersion() <<
"\nAllJoyn Library build info: " << ajn::GetBuildInfo() << std::endl;
// 注册 SIGNT (Ctrl-C) 信号处理
signal(SIGINT, SigIntHandler);
//要广发的daemon名
String nameToAdvertise = ::org::alljoyn::SampleDaemon::DefaultDaemonBusName;
// 命令行处理,如果有的话
for (int i = 1; i < argc; i++) {
if (0 == strcmp("-h", argv[i])) {
usage();
exit(0);
} else if (0 == strcmp("-n", argv[i])) {
if (argc == ++i) {
std::cout << "option " << argv[i - 1] << " requires a name parameter" << std::endl;
usage();
exit(1);
} else {
nameToAdvertise = argv[i];
}
} else {
std::cout << "Unknown option " << argv[i] << std::endl;
usage();
exit(1);
}
}
//创建总线对象
BusAttachment msgBus("SampleDaemon", true);
QStatus status = ER_FAIL;
//开启总线(内部实际上是启动了多个线程)
status = msgBus.Start();
if (ER_OK == status) {
//设置认证,瘦客户端需要以被信任方式连接此daemon(另外一种方式是非信任方式,不需要认证)
PasswordManager::SetCredentials(
::org::alljoyn::SampleDaemon::ThinClientAuthMechanism,
::org::alljoyn::SampleDaemon::ThinClientDefaultBusPwd
);
// Force connecting to bundled router (i.e. null transport) to ensure
// that credentials are correctly set.
//
// NOTE: The above SetCredentials call doesn't take effect
// when connecting to a daemon.
status = msgBus.Connect("null:");
if (ER_OK == status) {
// 'Quiet'ly advertise the name to be discovered by thin clients.
// Also, given that thin clients are in the same network as the
// SampleDaemon, advertise the name ONLY over TCP Transport.
//此名称是“悄悄地”向外发布的,所以有特定的格式要求
nameToAdvertise = "quiet@" + nameToAdvertise;
status = msgBus.AdvertiseName(nameToAdvertise.c_str(), TRANSPORT_TCP);
if (ER_OK != status) {
QCC_LogError(status, ("Unable to quietly advertise the name %s", nameToAdvertise.c_str()));
}
}
}
// Wait for Ctrl-C to exit
while (!g_interrupted) {
qcc::Sleep(100);
}
QCC_SyncPrintf("%s exiting with status %u (%s)\n", argv[0], status, QCC_StatusText(status));
return (int) status;
}