[[Tutorial]] #contents ''※準備中です'' *メッセージ送受信 [#zc25bba0] 前回のサンプルでは サービスプロバイダからコントローラへメッセージを送信しました。 ここではコントローラからサービスプロバイダへメッセージを送信し、サービスプロバイダが返事をするサンプルを紹介します。 ***コントローラサンプル [#z5f5cfa5] #highlight(cpp){{ #include <string> #include "Controller.h" #include "Logger.h" #include "ControllerEvent.h" #define PI 3.141592 #define DEG2RAD(DEG) ( (PI) * (DEG) / 180.0 ) using namespace std; class AgentController : public Controller { public: double onAction(ActionEvent &evt); void onRecvMsg(RecvMsgEvent &evt); void onInit(InitEvent &evt); private: BaseService *m_srv; }; void AgentController::onInit(InitEvent &evt) { m_srv = NULL; m_srv = connectToService("MyService"); } double AgentController::onAction(ActionEvent &evt) { if(m_srv != NULL){ m_srv->sendMsgToSrv("Hello"); } return 1.0; } void AgentController::onRecvMsg(RecvMsgEvent &evt) { std::string sender = evt.getSender(); std::string msg = evt.getMsg(); LOG_MSG(("[%s] %s", sender.c_str(), msg.c_str())); } extern "C" Controller * createController () { return new AgentController; } }} ***サービスサンプル [#d1d0956b] #highlight(cpp){{ #include "stdafx.h" #include "SIGService.h" #include <tchar.h> #include <string> class MyService : public sigverse::SIGService { public: MyService(std::string name) : SIGService(name){}; ~MyService(); void onRecvMsg(sigverse::RecvMsgEvent &evt); double onAction(); }; MyService::~MyService() { this->disconnect(); } double MyService::onAction() { return 1.0; } void MyService::onRecvMsg(sigverse::RecvMsgEvent &evt) { std::string sender = evt.getSender(); std::string msg = evt.getMsg(); if(msg == "Hello") { this->sendMsgToCtr(sender, "Hello! this is MyService"); } } int _tmain(int argc, _TCHAR* argv[]) { MyService srv("MyService"); // unsigned short port = (unsigned short)(atoi(argv[3])); // srv.connect(argv[2], port); srv.connect("hostname", <portnum>); srv.startLoop(); return 0; } }} #highlight(end)