123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #include "stdafx.h"
- #include "ChromiumFSM.h"
- #include <set>
- #include <string>
- //#include "zmq_utils.h"
- #include <boost/bind.hpp>
- #include "../mod_FreeRDPWrap/FreeRDPWrap_client_g.h"
- #include "../mod_browser/IEBrowser_client_g.h"
- #include "Chromium_msg_g.h"
- #include "baseEx.h"
- namespace Chromium{
- CChromiumFSM::CChromiumFSM(CEntityBase* pEntity):m_pEntity(pEntity)
- {
-
- }
- CChromiumFSM::~CChromiumFSM(){
- // if (NULL != m_hZmqServerThread)
- // {
- // m_hZmqServerThread->interrupt();
- // }
- }
- ErrorCodeEnum CChromiumFSM::OnInit(){
- return Error_Succeed;
- }
- ErrorCodeEnum CChromiumFSM::OnExit(){
- return Error_Succeed;
- }
- void CChromiumFSM::s0_on_entry(){
- // init zmq and start zmq service
- // m_hZmqServerThread = new boost::thread(boost::bind(&CChromiumFSM::zmq_stream_server_proc, this));
- }
- void CChromiumFSM::s0_on_exit(){
- return;
- }
- unsigned int CChromiumFSM::s0_on_event(FSMEvent* e){
- return 0;
- }
- void CChromiumFSM::s1_on_entry(){
- return;
- }
- void CChromiumFSM::s1_on_exit(){
- return;
- }
- unsigned int CChromiumFSM::s1_on_event(FSMEvent* e){
- return 0;
- }
- void CChromiumFSM::s2_on_entry(){
- return;
- }
- void CChromiumFSM::s2_on_exit(){
- return;
- }
- unsigned int CChromiumFSM::s2_on_event(FSMEvent* e){
- return 0;
- }
- //ZmqStreamServerProc - 服务端线程函数
- // void CChromiumFSM::zmq_stream_server_proc() {
- //
- // int rc;
- // std::set<std::string> peer_ids;
- // DWORD prev_tick = GetTickCount();
- //
- // // init zmq and start zmq service
- // if((m_pZmqCtx = zmq_ctx_new()) == NULL){
- // DbgEx("zmq_ctx_new failled!");
- // // Sleep(50);
- // return;
- // }
- // // init zmq socket
- // if((m_pZmqSock == zmq_socket(m_pZmqCtx, ZMQ_STREAM))){
- // DbgEx("zmq_socket failed");
- // // Sleep(50);
- // return;
- // }
- //
- // int enabled = 1;
- // rc = zmq_setsockopt(m_pZmqSock, ZMQ_STREAM_NOTIFY, &enabled, sizeof(enabled));
- // if (rc != 0)
- // {
- // DbgEx("zmq_setsockopt failed");
- // return;
- // }
- //
- // rc = zmq_bind(m_pZmqSock, m_strZmqAddr);
- // if (rc != 0)
- // {
- // DbgEx("zmq_bind failed");
- // return;
- // }
- //
- // while (true) {
- // // check interrupt point
- // boost::this_thread::interruption_point();
- // //对socket进行poll操作
- // zmq_pollitem_t items[] = {
- // { m_pZmqSock, 0, ZMQ_POLLIN, 0 },
- // };
- // rc = zmq_poll(items, 1, 100);
- //
- // if (rc == 1) {
- //
- // if (items[0].revents & ZMQ_POLLIN) {
- // //有数据可读,分为两种情况,一种是STREAM NOTIFY,一种是真实的客户端发出的数据
- //
- // zmq_msg_t peer_frame;
- //
- // //接收1st 对端ID帧
- // rc = zmq_msg_init(&peer_frame);
- // // assert(rc == 0);
- // rc = zmq_msg_recv(&peer_frame, m_pZmqSock, 0);
- // // assert(rc != -1);
- // // assert(zmq_msg_size(&peer_frame) > 0);
- // // assert(has_more(m_pZmqSock));
- // char * p_peer_frame_data = (char*)zmq_msg_data(&peer_frame);
- // //DbgEx("peer_id:%s\n", p_peer_frame_data);
- //
- // std::string str_peer_id(p_peer_frame_data, zmq_msg_size(&peer_frame));
- // zmq_msg_close(&peer_frame);
- //
- // //接收2nd 对端数据帧
- // zmq_msg_t data_frame;
- // rc = zmq_msg_init(&data_frame);
- // // assert(rc == 0);
- // rc = zmq_msg_recv(&data_frame, m_pZmqSock, 0);
- // // assert(rc != -1);
- // if (zmq_msg_size(&data_frame) == 0) {
- // if (peer_ids.find(str_peer_id) == peer_ids.end()) {
- // DbgEx("S :a new conn incoming\n");
- // peer_ids.insert(str_peer_id);
- // }
- // else {
- // DbgEx("S :an exsit conn disconnected\n");
- // peer_ids.erase(str_peer_id);
- // }
- // }
- // else {
- // char * p_data_frame_data = (char*)zmq_msg_data(&data_frame);
- // DbgEx("S :recv [%s]\n", p_data_frame_data);
- // }
- // zmq_msg_close(&data_frame);
- // }
- //
- // /*if (items[0].revents & ZMQ_POLLERR) {
- // DbgEx("S :ZMQ_POLLERR\n");
- // }*/
- //
- // }
- // else if (rc == 0) {
- // //0 表示poll没有相应事件,可认为socket出于空闲状态。
- // //DbgEx("S :zmq_poll() return 0\n");
- // //assert(false);
- //
- // //模拟每3秒钟给所有客户端发出请求
- // if (peer_ids.size() > 0 && (GetTickCount() - prev_tick) > 3000) {
- // for (auto iter = peer_ids.begin(); iter != peer_ids.end(); ++iter) {
- //
- // //服务器端先发出请求
- // //发出1st ID帧
- // rc = zmq_send(m_pZmqSock, iter->c_str(), iter->size(), ZMQ_SNDMORE);
- // //DbgEx("S :send identity res=%d errno=%d\n", rc, errno);
- // //assert(rc != -1);
- //
- // //发出2nd 数据帧
- // DbgEx("S :send:[%s]\n", "hello");
- // rc = zmq_send(m_pZmqSock, "hello", 6, ZMQ_SNDMORE);
- // //assert(rc != -1);
- // }
- // prev_tick = GetTickCount();
- // }
- // }
- // else {
- // DbgEx("S :zmq_poll() return error\n");
- // // assert(false);
- // }
- // }
- // rc = zmq_close(m_pZmqSock);
- // // assert(rc == 0);
- //
- // rc = zmq_ctx_term(m_pZmqCtx);
- // // assert(rc == 0);
- //
- // return ;
- // }
- void CChromiumFSM::start_chromium_browser(){
- using namespace FreeRDPWrap;
- FreeRDPWrapSrv_ClientBase *pClient = new FreeRDPWrapSrv_ClientBase(m_pEntity);
- auto rc = pClient->Connect();
- if (Error_Succeed != rc)
- {
- DbgEx("connect to FreeRDPWrapSrv entity fail: %d", rc);
- }else{
- FreeRDPWrapSrv_CreateProcessRunAs_Req req = {};
- FreeRDPWrapSrv_CreateProcessRunAs_Ans ans = {};
- req.strCmdLine = "D:\\xzc\\Release\\Release\\cefclient.exe --url=http://99.1.100.217/rvc.xzc.web";
- rc = pClient->CreateProcessRunAs(req, ans, 10000);
- if (rc != Error_Succeed)
- {
- DbgEx("get CreateProcessRunAs fail from FreeRDPWrap: %d", rc);
- }
- else
- {
- DbgEx("get CreateProcessRunAs succeed from FreeRDPWrap: %d", rc);
- }
- }
- }
- }
|