LibJingle使用siglot库来实现不同对象之间的交互,siglot是对象之间发送和接收消息的一个泛型框架,其使用如下
1.send类定义一个signal的成员,signalx定义回调函数的参数
2.receive类实现回调函数,receive类继承sigslot::has_slots<>
3.监听signal通过调用signal的connect函数,传入监听类对象引用,并注册回调
4.send类按函数原型调用signal成员,发送消息
#ifndef __SIGNAL_TEST_H
#define __SIGNAL_TEST_H
#include <string>
#include "talk/base/sigslot.h"
#include <stdio.h>
class Sender
{
public:
sigslot::signal1<std::string> SignalDanger;
void Panic();
};
class Receiver: public sigslot::has_slots<>
{
public:
Receiver(Sender &sender)
{
sender.SignalDanger.connect(this, &Receiver::OnDanger);
}
void OnDanger(std::string message)
{
printf("receive:%s\r\n", message.c_str());
}
};
#endif
#include "SignalTest.h"
void Sender::Panic()
{
SignalDanger("Help!");
}
#include "SignalTest.h"
int main(int argc, char **argv)
{
Sender sender;
Receiver recv(sender);
sender.Panic();
return 0;
}