当前位置: 首页>>代码示例>>C++>>正文


C++ TBreakPacket类代码示例

本文整理汇总了C++中TBreakPacket的典型用法代码示例。如果您正苦于以下问题:C++ TBreakPacket类的具体用法?C++ TBreakPacket怎么用?C++ TBreakPacket使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了TBreakPacket类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: NeedContextByClientKeyForSlave

//--------------------------------------------------------------------------------------
void TScRecommutationClient_SlaveImpl::BeginDonor(TDescRecvSession* pDesc)
{
  THeaderBeginDonor* pHeader = (THeaderBeginDonor*)pDesc->data;
  NeedContextByClientKeyForSlave(pHeader->id_client, true);
  if(Context()==NULL)
  {
    GetLogger(STR_NAME_MMO_ENGINE)->
      WriteF_time("TScRecommutationClient_SlaveImpl::BeginDonor() Context()==NULL.\n");
    BL_FIX_BUG();
    return;
  }
  //--------------------------------------------
  Context()->SetClientKey(pHeader->id_client);
  Context()->SetRoleAsDonor();// роль Донора
  // начало сценария
  if(Begin()==false)
  {
    // генерация ошибки
    GetLogger(STR_NAME_MMO_ENGINE)->
      WriteF_time("TScRecommutationClient_SlaveImpl::BeginDonor() scenario is not active.\n");
    BL_FIX_BUG();
    return;    
  }
  // сформировать пакет далее для Клиента
  TBreakPacket bp;
  THeaderBeginClient h;
  h.id_client = Context()->GetClientKey();
  bp.PushFront((char*)&h, sizeof(h));

  Context()->GetMS()->Send(GetID_SessionClientSlave(), bp);

  SetTimeWaitForNow();
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:34,代码来源:ScRecommutationClient_SlaveImpl.cpp

示例2: lockQtSend

//---------------------------------------------------------------------------
void TTestControlTank::Send()
{
	lockQtSend();
	//----------------------------
	UpdateAngle();
	TBreakPacket bp;
	bp.PushFront((char*)mDesc.get(), sizeof(TDesc));

	TDevTool_Share::TComponent* pComponent = TDevTool_Share::Singleton()->GetComponent();
	PrototypeMMOBaseServer* pBS = (PrototypeMMOBaseServer*)pComponent->mNet.Base;

	std::list<unsigned int> listKey;
	//###
	// рассылка всем клиентам
	PrototypeMMOSlave::TDescDownSlave descDown;
	int sizeDesc = sizeof(descDown);
	int countClient = pComponent->mNet.Slave->GetCountDown();
	for( int iClient = 0 ; iClient < countClient ; iClient++)
	{
		//if(pComponent->mNet.Slave->GetDescDown(iClient, (void*)&descDown, sizeDesc))
			//pBS->SendDown( descDown.id_session, bp);
		if(pComponent->mNet.Slave->GetDescDown(iClient, (void*)&descDown, sizeDesc))
		{
			unsigned int id_client;
			if(pComponent->mNet.Slave->FindClientKeyBySession(descDown.id_session,id_client))
				listKey.push_back(id_client);
		}
	}
	pBS->SendByClientKey( listKey, bp);
	//###
  //----------------------------
	unlockQtSend();
}
开发者ID:norak,项目名称:MMO-Framework,代码行数:34,代码来源:TestControlTank.cpp

示例3: Context

//--------------------------------------------------------------
void TScLoginClient_MasterImpl::Accept(unsigned int key, void* resForClient, int sizeResClient, 
                                       unsigned int id_session_slave, 
                                       unsigned int id_superserver)
{
  // сохранить свой ключ
  Context()->SetClientKey(key);
  // сохранить сессию СуперСервера
  SetID_SessionMasterSS(id_superserver);
  // сохранить сессию Slave
  SetID_SessionMasterSlave(id_session_slave);
  // выставить состояние контекста
  Context()->Accept();

  // если SuperServer существует, то отослать запрос ему
  // если нет, то отослать ответ клиенту сразу
  if(GetID_SessionMasterSS()==INVALID_HANDLE_SESSION)
  {
    // сразу ответ клиенту и Slave
    SendResultAccept2ClientAndSlave(key,
                                    resForClient, sizeResClient);
    return;
  }
  
  Context()->SaveAcceptData(resForClient, sizeResClient);
  // SuperServer
  TBreakPacket bp;
  THeaderRequestM2SS h;
  h.id_client = key;
  bp.PushFront((char*)&h, sizeof(h));
  Context()->GetMS()->Send(GetID_SessionMasterSS(), bp);
  // ждем ответ от SuperServer
  SetWaitSS();
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:34,代码来源:ScLoginClient_MasterImpl.cpp

示例4: NeedNumInQueueByClientKey

//-----------------------------------------------------------------------------
void TScLoginClient_MasterImpl::Work(unsigned int now_ms)
{
  // если клиент в очереди, обновить номер
  if(Context()->GetNumInQueue())
  {
    if(now_ms > Context()->GetTimeLastNeedNumInQueue() + eDeltaTimeNumInQueue_ms)
    {
      NeedNumInQueueByClientKey(Context()->GetID_SessionClientMaster());
      Context()->SetTimeLastNeedNumInQueue(now_ms);

      TBreakPacket bp;
      THeaderResultLoginM2C h;
      h.result     = THeaderResultLoginM2C::eQueue;
      h.numInQueue = Context()->GetNumInQueue();
      bp.PushFront((char*)&h, sizeof(h));
      Context()->GetMS()->Send(GetID_SessionClientMaster(), bp);
    }
    return;
  }
  // 
  if(Context()->GetTimeWait() + Context()->GetDeltaTimeWaitMS() < now_ms)
  {
    // ошибка на той стороне
    TEventError event;
    event.code = LoginClient_MasterClientNotActive;
    Context()->GetSE()->AddEventCopy(&event, sizeof(event));
    Context()->Reject();
    End();
  }
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:31,代码来源:ScLoginClient_MasterImpl.cpp

示例5: SendKeyRSA

//---------------------------------------------------------------------
void TSession::SendKeyRSA(TContainer& c_keyRSA)
{
  TBreakPacket bp;
  bp.PushFront((char*)c_keyRSA.GetPtr(), c_keyRSA.GetSize());

  SendData(eKeyRSA, bp, true);
  RefreshLastTime();
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:9,代码来源:Session.cpp

示例6: GetLogger

//-----------------------------------------------------------------------------
void TScLoginClient_ClientImpl::TryLogin(unsigned int ip, unsigned short port, unsigned char subNet,
                                         void* pLogin, int sizeLogin, void* pPassword, int sizePassword)
{
	if(Begin()==false)
  {
    // генерация ошибки
    GetLogger(STR_NAME_MMO_ENGINE)->
      WriteF_time("TScenarioLoginClient::TryLogin() scenario is not active.\n");
    BL_FIX_BUG();
    return;
  }
  Context()->SetNeedLeaveQueue(false);
  Context()->SetSubNet(subNet);

  TContainer cMITM;
  TBreakPacket bpLP;// контейнер для всего пакета
  if(Context()->GetMS()->GetUseCryptTCP())
  {
    // если данные шифруются, то формировать так:
    // получить RSA public key от ManagerSession
    TContainer cRSA;
    bool resRSA = Context()->GetMS()->GetRSAPublicKeyForUp(cRSA);
    BL_ASSERT(resRSA);
    TCryptMITM cryptMITM;
    bool res = cryptMITM.Calc(cRSA.GetPtr(), cRSA.GetSize(),
      pLogin, sizeLogin, pPassword, sizePassword, cMITM);
    BL_ASSERT(res);

    bpLP.PushFront(cMITM.GetPtr(), cMITM.GetSize());
		// сохранить на будущее
		Context()->Set_L_AES_RSA(cMITM.GetPtr(), cMITM.GetSize());
  }
  else
  {
    // иначе просто отправить данные:
    // формирование пакета
    bpLP.PushFront((char*)pLogin,    sizeLogin);
    bpLP.PushFront((char*)pPassword, sizePassword);
  }
  THeaderTryLoginC2M h;
  bpLP.PushFront((char*)&h, sizeof(h));

  // отослать пакет для попытки авторизации
  SetID_SessionClientMaster(Context()->GetMS()->Send(ip, port, bpLP, subNet));
  if(GetID_SessionClientMaster()==INVALID_HANDLE_SESSION)
  {
    // Генерация ошибки
    TEventError event;
    event.code = LoginClient_ClientMasterNotReady;
    Context()->GetSE()->AddEventCopy(&event, sizeof(event));
    End();
    return;
  }
  
  SetTimeWaitForNow();
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:57,代码来源:ScLoginClient_ClientImpl.cpp

示例7: Send

//----------------------------------------------------------------------------------
void TNetControlTCP::Send( unsigned int ip, unsigned short port, TBreakPacket& bp )
{
  THistoryPacketTCP::PackForSend( bp );
  bp.Collect();

  char* data = (char*) bp.GetCollectPtr();
  int size = bp.GetSize();

  RequestSend( data, size );
}
开发者ID:retrydev,项目名称:MMO-Framework,代码行数:11,代码来源:NetControlTCP.cpp

示例8: SaveContext

//--------------------------------------------------------------
void TScRecommutationClient_SlaveImpl::SaveContext(void* data, int size)
{
  TBreakPacket bp;
  if(data && size)
    bp.PushFront((char*)data, size);

  THeaderCheckBeginDonor h;
  h.id_client   = Context()->GetClientKey();
  bp.PushFront((char*)&h, sizeof(h));

  Context()->GetMS()->Send(GetID_SessionMasterSlave(), bp);
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:13,代码来源:ScRecommutationClient_SlaveImpl.cpp

示例9: Send

//----------------------------------------------------------------------------------
void TNetControlUDP::Send( unsigned int ip, unsigned short port, TBreakPacket& bp )
{
  // формируем заголовок
  TIP_Port ip_port( ip, port );
  unsigned short count_out = IncreaseCntOut( ip_port );
  bp.PushFront( (char*) &count_out, sizeof( count_out ) );
  bp.Collect();

  char* data = (char*) bp.GetCollectPtr();
  int size = bp.GetSize();
  RequestSendTo( data, size, ip_port );
}
开发者ID:retrydev,项目名称:MMO-Framework,代码行数:13,代码来源:NetControlUDP.cpp

示例10: Send

//----------------------------------------------------------------------------------
void TNetControlTCP::Send(unsigned int ip, unsigned short port, TBreakPacket& bp)
{
  // добавить заголовки в начало  - 2 байт под заголовок + 4 байта - размер данных
  THeaderTCP header;
  header.size = bp.GetSize();
  bp.PushFront((char*)&header, sizeof(header));
  bp.Collect();

  char* data = (char*)bp.GetCollectPtr();
  int size   = bp.GetSize();

	RequestSend(data,size);
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:14,代码来源:NetControlTCP.cpp

示例11: NeedContextByClientKey

//-------------------------------------------------------------------
void TScenarioSendToClient::RecvFromMaster(TDescRecvSession* pDesc)
{
	THeaderMaster* pH = (THeaderMaster*)pDesc->data;
	NeedContextByClientKey(pH->id_client);
	if(Context())
	{
		TBreakPacket bp;
		bp.PushFront(pDesc->data + sizeof(THeaderMaster), 
			           pDesc->sizeData - sizeof(THeaderMaster) );
		
		Send<THeaderSlave>(pH->id_client, bp);
	}
}
开发者ID:norak,项目名称:MMO-Framework,代码行数:14,代码来源:ScenarioSendToClient.cpp

示例12: Calc

bool TCryptMITM::Calc(void* rsa, int size_rsa, 
											void* pLogin, int sizeLogin,
                      void* pPassword, int sizePassword, 
											TContainer& c_result)
{
  TContainer cAES_RSA;
  // зашифровать публичный ключ RSA с помощью AES, используя в качестве ключа пароль
  TContainer cMD5_Password;
  TMD5 md5Password;
  md5Password.FastCalc(pPassword, sizePassword, cMD5_Password);
  TCryptoAES_Impl crypt_aes;
  crypt_aes.SetPublicKey(cMD5_Password.GetPtr(), cMD5_Password.GetSize());
  if(crypt_aes.Encrypt(rsa, size_rsa, cAES_RSA)==false)
    return false;

  TBreakPacket bp;
  // зашифрованный RSA
  bp.PushFront(cAES_RSA.GetPtr(), cAES_RSA.GetSize());
  // Login
  bp.PushFront((char*)pLogin, sizeLogin);
  // длина логина
  char lenLogin = sizeLogin;
  bp.PushFront(&lenLogin, sizeof(lenLogin));
  // собрать
  bp.Collect();
  // отдать собранный пакет
  c_result.Entrust((char*)bp.GetCollectPtr(), bp.GetSize());
  // отцепиться
  bp.UnlinkCollect();
	return true;
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:31,代码来源:CryptMITM.cpp

示例13: SendData

//---------------------------------------------------------------------
void TSession::SendData(char type, TBreakPacket& bp, bool check, bool use_crypt)
{
  THeader h(type);
  h.use_crypt = use_crypt;
  bp.PushFront((char*)&h, sizeof(THeader));
  mTransport->Send(mIP_Port.ip, mIP_Port.port, bp, check);
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:8,代码来源:Session.cpp

示例14: LeaveQueue

//--------------------------------------------------------------
void TScLoginClient_ClientImpl::LeaveQueue()
{
  // спросить у контекста состоит ли клиент в очереди
  if(Context()->GetNumInQueue()==0)
    return;

  TBreakPacket bp;
  THeaderLeaveQueueC2M h;
  bp.PushFront((char*)&h, sizeof(h));

  unsigned int id_master = GetID_SessionClientMaster();
  if(id_master==INVALID_HANDLE_SESSION)
    return;

  Context()->SetNeedLeaveQueue(true);
  Context()->GetMS()->Send(id_master,bp);
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:18,代码来源:ScLoginClient_ClientImpl.cpp

示例15: Context

//--------------------------------------------------------------
void TScLoginClient_ClientImpl::InfoSlaveM2C(TDescRecvSession* pDesc)
{
  Context()->SetNeedLeaveQueue(false);
  // смотрим что нам прислали
  THeaderInfoSlaveM2C* pInfoSlave = (THeaderInfoSlaveM2C*)pDesc->data;
  Context()->SetSlaveIP_Port(pInfoSlave->ip_port_slave);
  // чисто для отладки, что бы удостовериться что назначили
  // в будущем можно будет удалить
  Context()->SetClientKey(pInfoSlave->id_client);
  EventSetClientKey(pInfoSlave->id_client);

  // формируем пакет для Master
  TBreakPacket bp;
  THeaderCheckInfoSlaveC2M h;
  h.id_client = Context()->GetClientKey();// равнозначно - pInfoSlave->id_client;
  bp.PushFront((char*)&h, sizeof(h));

  Context()->GetMS()->Send(GetID_SessionClientMaster(),bp);
}
开发者ID:2asoft,项目名称:MMO-Framework,代码行数:20,代码来源:ScLoginClient_ClientImpl.cpp


注:本文中的TBreakPacket类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。