Example #1
0
void InputServer::sendToClients(char* eventPacket, int priority)
{
    std::map<char*,NetClient*>::iterator itr = netClients.begin();
    while( itr != netClients.end() )
    {
        NetClient* client = itr->second;

        if( client->isLegacy() )
        {
            //client->sendEvent(legacyPacket, 512);
        }
        else
        {
			if (priority == 0) // UDP
			{
				client->sendEvent(eventPacket, DEFAULT_BUFLEN);
			}
			else if (priority == 1) // TCP
			{
				client->sendMsg(eventPacket, DEFAULT_BUFLEN);
			}
        }
        itr++;
    }
}
Example #2
0
bool ServerConnectMgr::ConnectToServer(int32 nServerID,int32 nServerType,const char arrHost[32],int32 nPort,NetMsgEnter fEnter,NetMsgOn fMsg,NetMsgExit fExit)
{

	NetClientInfoVecterType::iterator it = m_vecNetClientInfo.begin();
	NetClientInfoVecterType::iterator itEnd = m_vecNetClientInfo.end();
	for (; it != itEnd;++it)
	{
		if((*it)->nServerID == nServerID)
			return false;
	}

	NetClient* pNetClient = new NetClient();
	pNetClient->SetAddress(arrHost, nPort);
	pNetClient->SetHandler(fEnter,fMsg,fExit);
	pNetClient->Start();

	NetClientInfo* pConn = new NetClientInfo();
	pConn->pNetClient = pNetClient;
	pConn->nServerID = nServerID;
	pConn->nServerType = nServerType;
	m_vecNetClientInfo.push_back(pConn);

	return true;

}
void sendMatrix(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);

  if (nrhs != 2) mexErrMsgTxt("Two arguments required: handle, matrix.");
  unsigned long datalen = mxGetN(prhs[1]) * mxGetM(prhs[1]);
  switch(mxGetClassID(prhs[1])) {
  case mxINT8_CLASS:
  case mxUINT8_CLASS:
  case mxCHAR_CLASS: datalen *= sizeof(char); break;
  case mxINT16_CLASS:
  case mxUINT16_CLASS: datalen *= sizeof(short); break;
  case mxUINT32_CLASS:
  case mxINT32_CLASS: datalen *= sizeof(int); break;
  case mxDOUBLE_CLASS: datalen *= sizeof(double); break;
  case mxSINGLE_CLASS: datalen *= sizeof(float); break;
  default:
      mexErrMsgTxt("Argument 2 must be a matrix of numeric type.");
  }


  void *theMatrix = mxGetPr(prhs[1]);

  try {
      nc->sendData(theMatrix, datalen);
  } catch (const SocketException & e) {
      const std::string why (e.why());
      if (why.length()) mexWarnMsgTxt(why.c_str());
      RETURN_NULL();
  }

  RETURN(1);
}
Example #4
0
void ServerConnectMgr::Update(int32 nSrvTime)
{
	// 检查要断开的NetClient
	DisconnectServerIDVectorType::iterator itServerID = m_vecNetClient.begin();
	DisconnectServerIDVectorType::iterator itEndServerID = m_vecNetClient.end();
	for (;itServerID != itEndServerID;++itServerID)
	{
		uint32 nServerID = *itServerID;
		for(NetClientInfoVecterType::iterator it = m_vecNetClientInfo.begin();it != m_vecNetClientInfo.end();)
		{
			if((*it)->nServerID == nServerID)
			{
				delete (*it)->pNetClient;
				(*it)->pNetClient = NULL;
				it = m_vecNetClientInfo.erase(it);
			}else
			{
				++it;
			}
		}
	}
	m_vecNetClient.clear();

	NetClientInfoVecterType::iterator it = m_vecNetClientInfo.begin();
	NetClientInfoVecterType::iterator itEnd = m_vecNetClientInfo.end();
	for(; it != itEnd; ++it)
	{
		NetClient* pNetClient = (*it)->pNetClient;
		if(pNetClient)
		{
			pNetClient->Update(nSrvTime);//1
		}
	}

}
Example #5
0
/*
 * query the number instances of a series
 */
int query_series_instances(const std::string& studyinstanceuid, const std::string& seriesinstanceuid, const std::string& server, const std::string& local_aet) {
	DcmDataset query;
	DcmElement* e = NULL;
	
	e = newDicomElement(DCM_QueryRetrieveLevel);
	e->putString("IMAGE");
	query.insert(e);

	e = newDicomElement(DCM_StudyInstanceUID);
	e->putString(studyinstanceuid.c_str());
	query.insert(e);

	e = newDicomElement(DCM_SeriesInstanceUID);
	e->putString(seriesinstanceuid.c_str());
	query.insert(e);

	e = newDicomElement(DCM_SOPInstanceUID);
	query.insert(e);

	e = newDicomElement(DCM_InstanceNumber);
	query.insert(e);

	std::cout << "NEW QUERY:" << std::endl;
	query.print(COUT);

	NetClient<FindAssociation> a;
	a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel);

	DcmStack* result = a.GetResultStack();
	std::cout << "query_series_instances = " << result->card() << std::endl;
 
	return result->card();
}
Example #6
0
void OInputServer::sendToClients(char* event){
	// Iterate through all clients
	std::map<char*,NetClient*>::iterator itr = netClients.begin();
	while( itr != netClients.end() ){
		NetClient* client = itr->second;
		client->sendEvent( event );
		itr++;
	}// while
	delete[] event; // Clean up event after being set to all clients
}// createClient
Example #7
0
int NetClient::syncSender (void* instance){ /** OPCIONAL **/
	NetClient* pNetClient = (NetClient *) instance;

	while (!pNetClient->m_stopClient){
		SDL_Delay(NetControl::M_SYNC_SEND_PERIOD);
		pNetClient->asyncSend();
	}
	
	pNetClient->m_syncSenderIsOn = false;
	
	return 0;
}
Example #8
0
void readString(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  NetClient *nc = GetNetClient(nrhs, prhs);

  try {
    std::string theString ( nc->receiveString() );
    plhs[0] = mxCreateString(theString.c_str());
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL(); // note empty return..
  }
}
static void
doA()
{
  cout << "[A] Initialized." << endl;

  NetClient* net = new MPIClient(0);
  mpz_t a;
  mpz_init_set_si(a, rand() + 213);

  cout << "[A] Send " << 1 << " mpz_t to A" << endl;
  gmp_printf("[A] Should expect: %Zd\n", a);
  net->sendZVector("Vec from A.", &a, 1);

  string header;
  header = net->waitForMessage();
  int valid = net->getDataAsZVector(&a, 1);
  cout << "[A] Recv " << valid << " mpz_t from B with the header: '" << header << "'" << endl;
  gmp_printf("[A] We got: %Zd\n", a);

  cout << "[A] Sending empty message." << endl;
  net->sendEmpty("Empty message from A.");

  header = "MSG 1";
  cout << "[A] Sending message: '" << header << "'." << endl;
  net->sendData(header, header.c_str(), header.length());

  header = "MSG 2";
  cout << "[A] Sending message: '" << header << "'." << endl;
  net->sendData(header, header.c_str(), header.length());

  cout << net->getGlobalStat() << endl;

  delete net;
}
Example #10
0
void SMWServer::onDisconnect(NetClient& client)
{
    printf("Disconnect event [%lu].\n", client.getPlayerID());
    uint64_t playerID = client.getPlayerID();
    if (players.count(playerID)) {
        playerLeavesRoom(playerID);
        log("[info] %s@%s disconnected.",
            players[playerID].name.c_str(),
            players[playerID].network_client->addressAsString().c_str());
        players.erase(playerID);
    }
    else
        printf("No such player!\n");
}
Example #11
0
void query_series_from_net(const std::string& studyinstanceuid, const std::string& server, const std::string& local_aet, const sigc::slot< void, const Glib::RefPtr< ImagePool::Series >& >& resultslot) {
	DcmDataset query;
	DcmElement* e = NULL;
	
	e = newDicomElement(DCM_QueryRetrieveLevel);
	e->putString("SERIES");
	query.insert(e);

	e = newDicomElement(DCM_SpecificCharacterSet);
	query.insert(e);

	e = newDicomElement(DCM_StudyInstanceUID);
	e->putString(studyinstanceuid.c_str());
	query.insert(e);

	e = newDicomElement(DCM_SeriesInstanceUID);
	query.insert(e);

	e = newDicomElement(DCM_SeriesNumber);
	query.insert(e);

	e = newDicomElement(DCM_Modality);
	query.insert(e);

	e = newDicomElement(DCM_SeriesDescription);
	query.insert(e);

	e = newDicomElement(DCM_SeriesTime);
	query.insert(e);

	e = newDicomElement(DCM_StationName);
	query.insert(e);

	e = newDicomElement(DCM_NumberOfSeriesRelatedInstances);
	query.insert(e);


	std::cout << "NEW QUERY:" << std::endl;
	query.print(COUT);

	NetClient<FindAssociation> a;
	a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel);

	DcmStack* result = a.GetResultStack();
	for(unsigned int i=0; i<result->card(); i++) {
		DcmDataset* dset = (DcmDataset*)result->elem(i);
		dset->print(COUT);
		resultslot(create_query_series(dset));
	}
}
Example #12
0
static void* st_WaitEeventThreadProc(void* lpParam)
{
	NetClient* pClientThis = (NetClient*)lpParam;
	int sockeId = pClientThis->GetSockId();
	std::string recvStr;
	while (!pClientThis->GetShutDown())
	{
		recvStr.clear();
		fu_socket_recv(sockeId, recvStr);
		if (!recvStr.empty())
		{
			pClientThis->NotifyRecvText(recvStr.c_str(), recvStr.length());
		}
	}
	return 0;
}
Example #13
0
void readLines(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  if(nlhs < 1) mexErrMsgTxt("One output argument required.");

  NetClient *nc = GetNetClient(nrhs, prhs);
  try {
    char **lines = nc->receiveLines();
    int m;
    for (m = 0; lines[m]; m++) {} // count number of lines
    plhs[0] = mxCreateCharMatrixFromStrings(m, const_cast<const char **>(lines));
    NetClient::deleteReceivedLines(lines);
  } catch (const SocketException &e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL(); // empty return set
  }
}
Example #14
0
void createNewClient(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  if (nlhs != 1) mexErrMsgTxt("Cannot create a client since no output (lhs) arguments were specified!");
  if (nrhs != 2) mexErrMsgTxt("Need two input arguments: Host, port!");
  const mxArray *host = prhs[0], *port = prhs[1];
  if ( !mxIsChar(host) || mxGetM(host) != 1 ) mexErrMsgTxt("Hostname must be a string row vector!");
  if ( !mxIsDouble(port) || mxGetM(port) != 1 || mxGetN(port) != 1) mexErrMsgTxt("Port must be a single numeric value.");
  
  char *hostStr = mxArrayToString(host);
  unsigned short portNum = static_cast<unsigned short>(*mxGetPr(port));
  NetClient *nc = new NetClient(hostStr, portNum);
  mxFree(hostStr);
  nc->setSocketOption(Socket::TCPNoDelay, true);
  int h = handleId++;
  MapPut(h, nc);
  RETURN(h);
}
Example #15
0
/*
 * query all seriesinstanceuid's and the number series of a study
 */
int query_study_series(const std::string& studyinstanceuid, const std::string& server, const std::string& local_aet, std::list<std::string>& seriesinstanceuids) {
	DcmDataset query;
	DcmElement* e = NULL;
	
	e = newDicomElement(DCM_QueryRetrieveLevel);
	e->putString("SERIES");
	query.insert(e);

	e = newDicomElement(DCM_StudyInstanceUID);
	e->putString(studyinstanceuid.c_str());
	query.insert(e);

	e = newDicomElement(DCM_SeriesInstanceUID);
	query.insert(e);

	e = newDicomElement(DCM_SeriesNumber);
	query.insert(e);

	e = newDicomElement(DCM_Modality);
	query.insert(e);

	std::cout << "NEW QUERY:" << std::endl;
	query.print(COUT);

	NetClient<FindAssociation> a;
	a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel);

	DcmStack* result = a.GetResultStack();
	DcmDataset* dset;
	OFString ofstr;

	seriesinstanceuids.clear();
	for(int i = 0; i < result->card(); i++) {
		dset = (DcmDataset*)result->elem(i);
		if(dset->findAndGetOFString(DCM_SeriesInstanceUID, ofstr).good()) {
			seriesinstanceuids.push_back(ofstr.c_str());
		}
	}

	std::cout << result->card() << " Responses" << std::endl;
	int count = result->card();

	return count;
}
Example #16
0
void tryConnection(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);
  //if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  bool ok = false;
  try {
    ok = nc->connect();
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL();
  }

  if (!ok) {
    mexWarnMsgTxt(nc->errorReason().c_str());
    RETURN_NULL();
  }

  RETURN(1);
}
Example #17
0
void sendMatrix(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);

  if(nrhs != 2)		mexErrMsgTxt("Two arguments required: handle, matrix.");
  //if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  if(mxGetClassID(prhs[0]) != mxDOUBLE_CLASS) 
	  mexErrMsgTxt("Argument 2 must be a matrix of doubles.");

  double *theMatrix = mxGetPr(prhs[1]);
  int msglen = mxGetN(prhs[1]) * mxGetM(prhs[1]) * sizeof(double);

  try {
    nc->sendData(theMatrix, msglen);
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL();
  }
  
  RETURN(1);
}
Example #18
0
void sendString(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);
  
  if(nrhs != 2)		mexErrMsgTxt("Two arguments required: handle, string.");
  //if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  if(mxGetClassID(prhs[1]) != mxCHAR_CLASS) 
	  mexErrMsgTxt("Argument 2 must be a string.");

  char *tmp = mxArrayToString(prhs[1]);
  std::string theString (tmp);
  mxFree(tmp);

  try {
    nc->sendString(theString);
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL();
  }  
  RETURN(1);
}
void tryConnection(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);
  //if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  bool ok = false;
  try {
    ok = nc->connect();
    if (ok) nc->setSocketOption(Socket::TCPNoDelay, true);
  } catch (const SocketException & e) {
    const std::string why (e.why());
    if (why.length()) mexWarnMsgTxt(why.c_str());
    RETURN_NULL();
  }

  if (!ok) {
    mexWarnMsgTxt(nc->errorReason().c_str());
    RETURN_NULL();
  }

  RETURN(1);
}
Example #20
0
int main()
{
    signal(SIGFPE, signal_handler);
    
    init_quote();

    //connect socket server
    NetClient* ClientHandler = new NetClient();
    ClientHandler->initClient(server_ip, server_prot);
    ClientHandler->netSocket();
    ClientHandler->netConnect();
    ClientHandler->verifyLogin();
    
    //start save db pthread
    //ClientHandler->start_save_thread();

    //start revc data and send msg to topic
    ClientHandler->startSendMsg();

    //destory active mq
    ActiveMqProducer::getInstance()->close();
    activemq::library::ActiveMQCPP::shutdownLibrary();

    //destory zlog
    zlog_fini();

    //delete 
    delete ClientHandler;

    return 0;
}
void readMatrix(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);
  int ndims, datalen;
  if (!nlhs)
      mexErrMsgTxt("output (lhs) parameter is required.");
  if (nrhs < 3 || !mxIsChar(prhs[1]) || !mxIsDouble(prhs[2]) || (ndims=mxGetN(prhs[2])) < 2 || mxGetM(prhs[2]) != 1)
      mexErrMsgTxt("'readMatrix' needs arguments:\n Argument 1 handle\n Argument 2, a string 'double' or 'single' or 'uint8'\n Argument 3, a 1x4, 1x3 or 1x2 vector of dimensions for m,n[,o,p]");
  int buflen = (mxGetM(prhs[1]) * mxGetN(prhs[1]) * sizeof(mxChar)) + 1;
  std::string stdstr(buflen, '0');
  mxGetString(prhs[1], &stdstr[0], buflen);
  const char *str = stdstr.c_str();
  const double *dims_dbls = mxGetPr(prhs[2]);
  if (ndims > 4) ndims = 4;
  const int dims[] = { static_cast<int>(dims_dbls[0]),
                       static_cast<int>(dims_dbls[1]),
                       ndims >= 3 ? static_cast<int>(dims_dbls[2]) : 1,
                       ndims >= 4 ? static_cast<int>(dims_dbls[3]) : 1 };
  datalen = dims[0]*dims[1]*dims[2]*dims[3];
  mxClassID cls;
  if (!strcmpi(str, "double")) cls = mxDOUBLE_CLASS, datalen *= sizeof(double);
  else if (!strcmpi(str, "single")) cls = mxSINGLE_CLASS, datalen *= sizeof(float);
  else if (!strcmpi(str, "int8")) cls = mxINT8_CLASS, datalen *= sizeof(char);
  else if (!strcmpi(str, "uint8")) cls = mxUINT8_CLASS, datalen *= sizeof(char);
  else if (!strcmpi(str, "int16")) cls = mxINT16_CLASS, datalen *= sizeof(short);
  else if (!strcmpi(str, "uint16")) cls = mxUINT16_CLASS, datalen *= sizeof(short);
  else if (!strcmpi(str, "int32")) cls = mxINT32_CLASS, datalen *= sizeof(int);
  else if (!strcmpi(str, "uint32")) cls = mxUINT32_CLASS, datalen *= sizeof(int);
  else  mexErrMsgTxt("Output matrix type must be one of 'single', 'double', 'int8', 'uint8', 'int16', 'int16', 'int32', 'uint32'.");
  plhs[0] = mxCreateNumericArray(ndims, dims, cls, mxREAL);
  try {
      nc->receiveData(mxGetData(plhs[0]), datalen, true);
  } catch (const SocketException & e) {
      const std::string why (e.why());
      if (why.length()) mexWarnMsgTxt(why.c_str());
      mxDestroyArray(plhs[0]);
      plhs[0] = 0;  // nullify (empty) return..
      RETURN_NULL();
  }
}
Example #22
0
void ClientInit()
{
	 InitNetMsg();

	 for (int32 i = 0; i < MAX_CLIENT_COUNT; ++i)
	 {
		 NetClient* gNetClient = new NetClient();
		 gNetClient->SetAddress("127.0.0.1", 9900);
		 gNetClient->SetHandler(OnNetMsgEnter, OnNetMsg, OnNetMsgExit);
		 gNetClient->Start();

		 ClientPlayer* gPlayer = new ClientPlayer();
		 gPlayer->SetSocket(gNetClient->GetSocket());

         ClientPlayerMgr::Instance()->AddSocket(gNetClient,gPlayer);
	 }

	//命令调试
	//gGameCommond.Init(gNetClient->GetSocket());
	//GameCommand::CommandHelp();

}
Example #23
0
void sendInt32Matrix(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);

  if(nrhs != 2)		mexErrMsgTxt("Two arguments required: handle, vector.");
  if(mxGetClassID(prhs[0]) != mxDOUBLE_CLASS) 
	  mexErrMsgTxt("Argument 2 must be a 1x1 scalar of doubles.");
  if(mxGetClassID(prhs[1]) != mxINT32_CLASS) 
	  mexErrMsgTxt("Argument 3 must be a matrix of int32s.");

  int32 *theInts = reinterpret_cast<int32 *>(mxGetData(prhs[1]));
  int msglen = mxGetN(prhs[1]) * mxGetM(prhs[1]) * sizeof(int32);

  try {
    nc->sendData(theInts, msglen);
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    RETURN_NULL();
  }
  
  RETURN(1);
}
Example #24
0
void readInt32Matrix(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  NetClient *nc = GetNetClient(nrhs, prhs);
  if(nrhs != 3 || !mxIsDouble(prhs[1]) || !mxIsDouble(prhs[2]) ) mexErrMsgTxt("Output matrix size M, N as 2 real argument are required.");
  //if(nlhs < 1) mexErrMsgTxt("One output argument required.");
  
  const int m = static_cast<int>(*mxGetPr(prhs[1])), 
            n = static_cast<int>(*mxGetPr(prhs[2]));  
  const int dataLen = m*n*sizeof(int32);
  const int dims[] = { m, n };
  
  plhs[0] = mxCreateNumericArray(2, dims, mxINT32_CLASS, mxREAL);
  
  try {
    nc->receiveData(mxGetData(plhs[0]), dataLen, true);
  } catch (const SocketException & e) {
    mexWarnMsgTxt(e.why().c_str());
    mxDestroyArray(plhs[0]);
    plhs[0] = 0;  // nullify (empty) return..
    RETURN_NULL();
  }
}
Example #25
0
static void worker (Thread *thread)
{
        NetClient *client = thread->argument;
        NetClientEpollEvent event;
        int count;
        int i;

        while (net_client_epoll_events_count (client->epoll, &count)) {
                for (i = 0; i < count; i++) {
                        event = net_client_epoll_event (client->epoll, i);
                        if (event.stop) {
                                return;
                        }
                        else if (event.connect) {
                                worker_connect (client, event.pointer);
                        }
                        else {
                                worker_connect_error (client, event.pointer);
                        }
                }
        }
        client->on_error (client);
        return;
}
static void
doB()
{
  cout << "[B] Initialized." << endl;

  NetClient* net = new MPIClient(1);
  mpz_t a;
  mpz_init_set_ui(a, 0);

  string header;
  header = net->waitForMessage();
  int valid = net->getDataAsZVector(&a, 1);
  cout << "[B] Recv " << valid << " mpz_t from A with the header: '" << header << "'" << endl;
  gmp_printf("[B] We got: %Zd\n", a);

  mpz_set_si(a, rand() + 2342);
  cout << "[B] Send " << 1 << " mpz_t to A." << endl;
  gmp_printf("[B] Should expect: %Zd\n", a);
  net->sendZVector("Vec from B.", &a, 1);

  header = net->waitForMessage();
  cout << "[B] Recv Empty from A." << endl;
  cout << "[B] H: " << header << endl;

  header = net->waitForMessage();
  cout << "[B] Recv MSG treated as empty from A." << endl;
  cout << "[B] H: " << header << endl;

  char* buf;
  header = net->waitForMessage();
  size_t len = net->getData(&buf);
  cout << "[B] Recv MSG from A." << endl;
  cout << "[B] H: " << header << endl;
  header.assign(buf, len);
  cout << "[B] len: " << len << " D: " << header << endl;

  cout << net->getGlobalStat() << endl;

  delete net;
}
Example #27
0
static size_t
getDataAsVector(NetClient& net, T* vec, size_t len)
{
  FILE* f = tmpfile();

  net.getDataAsFile(f);
  rewind(f);

  size_t nvalid;
  for (nvalid = 0; nvalid < len; nvalid++)
  {
    if (!inRaw(vec[nvalid], f))
      break;
  }
  fclose(f);
  return nvalid;
}
Example #28
0
void SMWServer::sendVisibleRoomEntries(NetClient& client)
{
    if (!rooms.size()) {
        sendCode(client, NET_RESPONSE_NO_ROOMS);
        return;
    }

    printf("Sending %lu rooms:\n", rooms.size());
    auto it = rooms.begin();
    while (it != rooms.end()) {
        Room* room = &it->second;
        if (room->visible)
        {
            RoomInfoPackage roomInfo;
            {
                roomInfo.protocolMajorVersion = NET_PROTOCOL_VERSION_MAJOR;
                roomInfo.protocolMinorVersion = NET_PROTOCOL_VERSION_MINOR;
                roomInfo.packageType = NET_RESPONSE_ROOM_LIST_ENTRY;

                roomInfo.roomID = room->roomID;

                memcpy(roomInfo.name, room->name, NET_MAX_ROOM_NAME_LENGTH);
                roomInfo.name[NET_MAX_ROOM_NAME_LENGTH - 1] = '\0';

                roomInfo.passwordRequired = false;
                if (room->password[0] != '\0')
                    roomInfo.passwordRequired = true;

                roomInfo.currentPlayerCount = 0;
                for (long unsigned p = 0; p < 4; p++)
                    if (room->players[p])
                        roomInfo.currentPlayerCount++;

                roomInfo.gamemodeID = room->gamemodeID;

                printf("  room %d: {%s; pass?: %d; players: %d}\n",
                    roomInfo.roomID, roomInfo.name, roomInfo.passwordRequired, roomInfo.currentPlayerCount);
            }

            client.sendData(&roomInfo, sizeof(RoomInfoPackage));
        }

        ++it;
    }
}
Example #29
0
static void
sendVector(NetClient& net, const string& vecname, const T* vec, size_t len)
{
  FILE* f = tmpfile();

  size_t fsize = 0; 
  for (size_t i = 0; i < len; i++)
  {
    size_t outLen = 0;

    if ((outLen = outRaw(f, vec[i])))
      fsize += outLen;
    else
      cerr << "[NetClient] Failed writing a gmp element.";
  }

  rewind(f);
  net.sendFile(vecname, f, fsize);

  fclose(f);
}
Example #30
0
int main()
{
    int port = 10088;
    int port2 = 5188;
    std::string ip = "183.62.250.18";

    NetClient* ClientHandler = new NetClient();
    ClientHandler->initClient(ip, port);
    ClientHandler->netSocket();
    ClientHandler->netConnect();

    //init mqtt client
    mqtt::async_client client(ADDRESS, CLIENTID);
    callback cb;
    client.set_callback(cb);
    mqtt::itoken_ptr conntok = client.connect();

    try{
        std::cout << "the mqtt waiting for the connection..." << std::flush;
        conntok->wait_for_completion();
        std::cout << "OK" << std::endl;
    }catch (const mqtt::exception& exc) {
        std::cerr << "Error: " << exc.what() << std::endl;
    }
    
    //test mqtt
    std::string test_message = "this is a test meesage...";
    mqtt::message_ptr pubmsg = std::make_shared<mqtt::message>(test_message);
    pubmsg->set_qos(QOS);
    client.publish(TOPIC, pubmsg)->wait_for_completion(TIMEOUT);

    //init active mq
    std::string brokerURI = "failover:(tcp://101.37.33.121:61616)";
    bool useTopic = true;
    bool clientAck = false;
    std::string topic = "QUOTE.ORG";
 
    activemq::library::ActiveMQCPP::initializeLibrary();
    ActiveMqProducer::getInstance()->initProducer(brokerURI, useTopic, clientAck);

    //init write file
    std::string date = getDate();
    std::string filename = date +".log";
    std::ofstream out_file(filename, ios::app);

    //start recv json data 
    bool log_flag = ClientHandler->verifyLogin();
    std::string str="";
    while( log_flag )
    {
        ClientHandler->recvData( str );

        if(!str.empty())
        {
            std::string tmep_send = str.substr(0, str.length()-1);
            ActiveMqProducer::getInstance()->sendMessage(topic, tmep_send);
            //write the message to another file
            out_file << getDateAndTime() << "[The received data:]" << tmep_send << std::endl << std::endl;

            str="";
        }
    }

    std::vector<mqtt::idelivery_token_ptr> toks = client.get_pending_delivery_tokens();
    if (!toks.empty())
    {
        std::cout << "Error: There are pending delivery tokens!" << std::endl;
    }
    
    // mqtt disconnect
    std::cout << "Disconnecting..." << std::flush;
    conntok = client.disconnect();
    conntok->wait_for_completion();
    std::cout << "OK" << std::endl;


    //destory active mq
    ActiveMqProducer::getInstance()->close();
    activemq::library::ActiveMQCPP::shutdownLibrary();

    //delete 
    delete ClientHandler;

    return 0;
}