int main(void)
{
#ifdef chat
    InitScreen();
    InitSystem();
    ClientConnectChat(1);
    MessageType();
    ClientConnectChat(0);

    DeleteScreen();
    EndClient();

#endif
#ifdef server

    ProcInit();
    printf("server end \n");

#endif
#ifdef test

    InitSystem();

#endif
    return 0;
}
void CommsProcessor::serverCallback() {
	string sourceAddress;								// Address of datagram source
	unsigned short sourcePort;					// Port of datagram source
	listenSocket.setLocalPort( svrPort );

	// set up the listening socket
	this->listenSocket.setRecvTimeout( 500 ); // 500 ms

	while( running ) {
		int bytesRcvd;

		bytesRcvd = this->listenSocket.recvFrom( recvBuf, maxMsgSize, sourceAddress, sourcePort );

		// if recieve call timedout then just start loop over
		if( bytesRcvd == 0 )
			continue;

		Message *buf = (Message*)recvBuf;
		switch( MessageType(buf->header.msgType) ) {
			case MessageType::CLIENT_EVENT:
			{
				BufferReader readBuffer( buf->payload, buf->header.len);
				EventType type = Event::getType( readBuffer );
				Event* event = owner->eventCtors->invoke(readBuffer);
				handoffQ->push( event );

				break;
			}
			default:
				break;
		}
	}
}
Beispiel #3
0
void GameClient::message_received(const char* msg) {
	MessageType message_type = MessageType((msg[0] - 'A') * 26 + (msg[1] - 'A'));
	const char* msg_contents = msg+2;
#ifdef DEBUG
	fprintf(stderr, "Message received: \"%s\"\n", msg);
#endif

	switch (message_type) {
	case SHOOTER_MAP:
		m_shooter->deserialize_map(msg_contents);
		break;
	case SHOOTER_STATE:
		m_shooter->deserialize_state(msg_contents);
		break;
	case PING:
		unsigned ping_start, ping_end;
		ping_start = atoi(msg_contents);
		ping_end = clock();
		m_ping = ping_end - ping_start;
		break;
	case CLIENT_PLAYER_ID:
		m_player_id = atoi(msg_contents);
		break;
	default:
		fprintf(stderr, "Unknown message type: %d\n", message_type);
		printf("Message was: %s\n", msg_contents);
		break;
	}
}
Beispiel #4
0
Variant ClientBase::sendBuffer(char type, RequestID requestID, std::ostringstream &stream)
{	
	unsigned int size = (unsigned int)stream.tellp();
	size -= sizeof(size);
	stream.seekp(0);
	stream.write((const char*)&size, sizeof(size));

	RequestData rd;
	rd.type = MessageType(type);
	rd.id = requestID;
	rd.data = stream.str();

	if(asyncMode())
	{
		rd.writeCompletePtr.reset(new FutureResult);
		bool empty = m_messageQueue.empty();
		m_messageQueue.push(rd);
		if(empty)
		{
			writeData(m_messageQueue.front().data);			
		}
		return rd.writeCompletePtr;
	}
	else
	{
		writeData(rd.data);	
	}
	return Variant();
}
Beispiel #5
0
void Protocol::setFullMessage(const QString &fullMessage)
{
    if (fullMessage.startsWith("$") and fullMessage.endsWith("$"))
    {
        QStringList msg = fullMessage.trimmed().split(";");

        int type = msg.at(0).right(msg.at(0).size()-1).toInt();
        header = MessageType(type);

        if (msg.size() == 2)
            body = msg.at(1).left(msg.at(1).size()-1);
        else
            body = msg.at(1);

        QStringList commandList = msg.at(2).left(msg.at(2).size()-1).split(",");
        QStringList command;

		for (int i = 0; i < commandList.size(); i+=1)
		{
			command = commandList.at(i).split(":");
			if (command.size() % 2 == 0)
				otherCommands.insert(command.at(0).toLower(),QVariant(command.at(1)));
			else
				break;
		}
    }
}
Beispiel #6
0
void MessageManager::NotifyHandlers(MessageType msgType, char* msg)
{
	//implements enum as int
	for (int mt = DEFAULT_MSG; mt <= DEBUG_MSG; mt = mt << 1) {
		if ((msgType & mt) == mt) {
			auto range = m_handlers.equal_range(MessageType(mt));
			for (auto iter = range.first; iter != range.second; iter++) {
				iter->second->Notify(msg);
			}
		}
	}
}
Beispiel #7
0
   void MessagePump::EmitMessage(const Message& msg)
   {
      dtEntity::MessageType messageType = msg.GetType();
      if(messageType == MessageType())
      {
         LOG_ERROR("Trying to send a message with an empty type string!");
         return;
      }
      std::pair<MessageFunctorRegistry::iterator, MessageFunctorRegistry::iterator> keyRange;
      keyRange = mMessageFunctors.equal_range(messageType);
      
      // cannot call functors directly in loop because functors may call the
      // RegisterForMessage function and invalidate the iterator.
      typedef std::list<std::pair<MessageFunctor, StringId> > FunctorsToCall;
      FunctorsToCall functorsToCall;
      

      MessageFunctorRegistry::iterator it = keyRange.first;
      while(it != keyRange.second)
      {
         MsgRegistryEntry entry = it->second;
         unsigned int regoptions = entry.mOptions;

         if((regoptions & FilterOptions::UNREGISTERED) != 0)
         {
            mMessageFunctors.erase(it++);
            continue;         
         }

         assert(messageType == it->first && "Something went wrong with message registration!");
         
         functorsToCall.push_back(std::make_pair(entry.mFunctor, entry.mFuncName));

         if((regoptions & FilterOptions::SINGLE_SHOT) != 0)
         {
            mMessageFunctors.erase(it++);
            continue;    
         }
         ++it;
      }

      FunctorsToCall::iterator j;
      for(j = functorsToCall.begin(); j != functorsToCall.end(); ++j)
      {
#if DTENTITY_PROFILING_ENABLED
         CProfileManager::Start_Profile(j->second);
#endif
         (j->first)(msg);
#if DTENTITY_PROFILING_ENABLED
         CProfileManager::Stop_Profile();
#endif
      }
   }
void CommsProcessor::clientCallback() {
	string sourceAddress;								// Address of datagram source
	unsigned short sourcePort;					// Port of datagram source
	listenSocket.setLocalPort( clntPort );

	// set up the listening socket
	listenSocket.joinGroup( mcastAddr );
	listenSocket.setRecvTimeout( 500 ); // 500 ms

	while( running ) {
		int bytesRcvd;

		bytesRcvd = listenSocket.recvFrom( recvBuf, maxMsgSize, sourceAddress, sourcePort );

		// if recieve call timedout then just start loop over
		if( bytesRcvd == 0 )
			continue;

		Message *buf = (Message*)recvBuf;
		switch( MessageType(buf->header.msgType) ) {
			case MessageType::SERVER_EVENT:
			{
				BufferReader readBuffer( buf->payload, buf->header.len );
				Event* event = owner->eventCtors->invoke(readBuffer);
				if( event->getType() == EventType::UPDATE && owner->isRunning() ) {
					if( owner->shouldProcessEvents() ) {
						UpdateEvent* updateEvent = Event::cast<UpdateEvent>( event );
						updateEvent->setChild( owner->objectCtors->invoke( readBuffer ) );
						handoffQ->push( event );
					} else delete event;
				} else if ( owner->isRunning() ){
					handoffQ->push( event );
				} else {
					delete event;
				}
				break;
			}
			case MessageType::SERVER_ANNOUNCE:
				announceSignaled = true;
				if( serverAddr == "255.255.255.255" ) {
					serverAddr = sourceAddress;
				}
				cv.notify_one();
				break;
			default:
				break;
		}
	}

	listenSocket.leaveGroup( mcastAddr );
}
Beispiel #9
0
void MessageManager::UnRegisterHandler(IMessageHandler *hndlr, MessageType msgType)
{
	//may call destructor on pointers???
	for (int mt = DEFAULT_MSG; mt <= DEBUG_MSG; mt = mt << 1) {
		if ((msgType & mt) == mt) {
			auto range = m_handlers.equal_range(MessageType(mt));
			auto iter = range.first;
			while (iter != range.second)
			{
				if (iter->second == hndlr) {
					auto temp = iter;
					iter++;
					m_handlers.erase(temp);
				} else {
					iter++;
				}
			}
		}
	}

}
Beispiel #10
0
std::vector< terrama2::core::ProcessLogger::Log > terrama2::core::ProcessLogger::getLogs(const ProcessId processId, uint32_t begin, uint32_t end) const
{
  if(!isValid_)
    throw terrama2::core::LogException() << ErrorDescription("Error on log!");

  if(tableName_.empty())
  {
    QString errMsg = QObject::tr("Can not find log table name. Is it setted?");
    TERRAMA2_LOG_ERROR() << errMsg;
    throw terrama2::core::LogException() << ErrorDescription(errMsg);
  }

  if(begin > end)
    std::swap(begin, end);

  int rowNumbers = (end - begin) + 1;

  std::string sql ="SELECT * FROM " + tableName_ +
                   " WHERE process_id = "  + std::to_string(processId) +
                   " ORDER BY id DESC" +
                   " LIMIT " + std::to_string(rowNumbers) +
                   " OFFSET " + std::to_string(begin);

  std::unique_ptr< te::da::DataSourceTransactor > transactor = dataSource_->getTransactor();

  std::unique_ptr<te::da::DataSet> tempDataSet(transactor->query(sql));

  std::vector< Log > logs;

  while(tempDataSet->moveNext())
  {
    Log tempLog;

    tempLog.id = tempDataSet->getInt32("id");
    tempLog.processId = tempDataSet->getInt32("process_id");
    tempLog.status = Status(tempDataSet->getInt32("status"));
    tempLog.start_timestamp = std::shared_ptr<te::dt::TimeInstantTZ>(dynamic_cast<te::dt::TimeInstantTZ*>(tempDataSet->getDateTime("start_timestamp").release()));
    tempLog.data_timestamp = std::shared_ptr<te::dt::TimeInstantTZ>(dynamic_cast<te::dt::TimeInstantTZ*>(tempDataSet->getDateTime("data_timestamp").release()));
    tempLog.last_process_timestamp = std::shared_ptr<te::dt::TimeInstantTZ>(dynamic_cast<te::dt::TimeInstantTZ*>(tempDataSet->getDateTime("last_process_timestamp").release()));
    tempLog.data = tempDataSet->getAsString("data");


    std::string sqlMessages ="SELECT * FROM " + messagesTableName_ +
                             " WHERE log_id = "  + std::to_string(tempLog.id) +
                             "ORDER BY id";

    std::unique_ptr<te::da::DataSet> tempMessagesDataSet(transactor->query(sqlMessages));

    std::vector< MessageLog > messages;

    while(tempMessagesDataSet->moveNext())
    {
      MessageLog tempMessage;

      tempMessage.id = tempMessagesDataSet->getInt32("id");
      tempMessage.log_id = RegisterId(tempMessagesDataSet->getInt32("log_id"));
      tempMessage.type = MessageType(tempMessagesDataSet->getInt32("type"));
      tempMessage.description = tempMessagesDataSet->getAsString("description");
      tempMessage.timestamp = std::shared_ptr<te::dt::TimeInstantTZ>(dynamic_cast<te::dt::TimeInstantTZ*>(tempMessagesDataSet->getDateTime("timestamp").release()));

      messages.push_back(tempMessage);
    }

    tempLog.messages = messages;

    logs.push_back(tempLog);
  }

  return logs;
}
NavMessage::MessageType 
NavMessage::replyType( MessageType request ) {
   return MessageType( request + 1 );
}