看文档看的有点迷糊,不如看下源代码talk下example下的login例子的代码很简单。
std::cout << "Auth Cookie: ";
std::string auth_cookie;
std::getline(std::cin, auth_cookie);
std::cout << "User Name: ";
std::string username;
std::getline(std::cin, username);
// Start xmpp on a different thread
XmppThread thread;
thread.Start();
buzz::XmppClientSettings xcs;
xcs.set_user(username.c_str());
xcs.set_host("gmail.com");
xcs.set_use_tls(buzz::TLS_DISABLED);
xcs.set_auth_cookie(auth_cookie.c_str());
xcs.set_server(talk_base::SocketAddress("talk.google.com", 5222));
thread.Login(xcs);
// Use main thread for console input
std::string line;
while (std::getline(std::cin, line)) {
if (line == "quit")
break;
}
return 0;
重点就是XmppClientSettings和XmppThread2个类的内容了。
查看XmppClientSettings的定义,是XmppUserSettings的子类,2个类好像都只是作为数据的封装用。只有属性,没有实质性的行为。
不知道这里set_host和set_server有啥区别。host和server不是同一个东西吗?
xmppthread是继承自talk_base::Thread, XmppPumpNotify, talk_base::MessageHandler 的一个实现。
Login中调用了一个Post方法。不知道Post方法是来自哪里的.Post只是提交了一个消息。可能是系统自带的吧。具体的login过程是写在Onmessage里面的
XmppThread创建的时候就生成了一个XmppPump类。调用XmppPump的Dologin方法来完成基于Xmpp协议的登录。
然后就是一个接收消息的循环。循环占cpu啊。所以这个只是login的例子。
可恨的是这个例子也没有是否登录成功的提示。。。好悲剧啊
我猜是否更新成功的提示是应该写在OnStateChange事件中的。例子中没有实现。
写了点代码输出这个状态变量state。可是不管我账户和密码是否对,只有124状态,没有3状态啊。好像3状态才是成功的。
enum State {
STATE_NONE = 0, //!< Nonexistent state
STATE_START, //!< Initial state.
STATE_OPENING, //!< Exchanging stream headers, authenticating and so on.
STATE_OPEN, //!< Authenticated and bound.
STATE_CLOSED, //!< Session closed, possibly due to error.
};
可能需要ssl,可能。。。好吧。先这样吧。
来看call的例子。试了下这个例子时能登录的。
而且,我承认这个例子已经很强大了。
2012-2-20今天看了下,0.6.13已经出来了。
想试着把例子call做成一个vs项目。
编译600多个错误
加上WIN32 环境定义 属性设置,c/c++,preprocess,preprocess definitions里加。
另外少了testing部分的代码。可以先把相关的文件去掉。。代码应该是有的,路径不对吧。好像hammer.bat能产生对应的lib库。
后面有个str啥的undeclared的错误,是因为FEATURE_ENABLE_VOICEMAIL 没加
具体可以看constrans.h里的条件编译代码
然后出来很多的link错误,有300多个。根据经验,这个当然是lib设置不对的问题咯
添加了lib路径,linker里加了对应的引用后。少了很多。
还有和msvcprtd.lib冲突的。在Configuration Properties -> Linker -> Ignore Specific Library"里设置下
2012-2-21
然后继续错误,根据错误google,添加winmm.lib 剩103错误
添加ws2_32.lib 剩26错误
添加crypt32.lib secur32.lib dnsapi.lib,剩10个错误
添加Iphlpapi.lib 剩9个 。真郁闷,少了这些lib有没有更好的方法查呢。非得google?
突然想到查看scons文件。添加了strmiids.lib 剩7个
根据scons文件的线索。发现要用/mt模式编译
然后把前面Ignore Specific Library 的lib去掉。ok成功了。。
小小的佩服下自己,不是只会google的小白了。搞了半天,可能是只有设置成mt模式,然后安装scons的要求添加需要的lib就可以了。改天再试试看。