如何创建一个libjingle程序

来源:互联网 发布:金属小手提箱淘宝 编辑:程序博客网 时间:2024/05/16 01:26

看文档看的有点迷糊,不如看下源代码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就可以了。改天再试试看。