本文整理汇总了C++中QueuePacket函数的典型用法代码示例。如果您正苦于以下问题:C++ QueuePacket函数的具体用法?C++ QueuePacket怎么用?C++ QueuePacket使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了QueuePacket函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: while
void CBaseSplitterOutputPin::MakeISCRHappy()
{
CComPtr<IPin> pPinTo = this, pTmp;
while (pPinTo && SUCCEEDED(pPinTo->ConnectedTo(&pTmp)) && (pPinTo = pTmp)) {
pTmp = nullptr;
CComPtr<IBaseFilter> pBF = GetFilterFromPin(pPinTo);
if (GetCLSID(pBF) == GUIDFromCString(_T("{48025243-2D39-11CE-875D-00608CB78066}"))) { // ISCR
CAutoPtr<Packet> p(DEBUG_NEW Packet());
p->TrackNumber = DWORD_ERROR;
p->rtStart = -1;
p->rtStop = 0;
p->bSyncPoint = FALSE;
p->SetData(" ", 2);
QueuePacket(p);
break;
}
pPinTo = GetFirstPin(pBF, PINDIR_OUTPUT);
}
}
开发者ID:Blitzker,项目名称:mpc-hc,代码行数:22,代码来源:BaseSplitter.cpp
示例2: SendForumCategories
void SendForumCategories(vector<ForumCategory*>& categories, BaseSocket* pRouter, FCSOCKET clientSocket)
{
PEPacket* pkt = new PEPacket;
__FCPKT_FORUM_GET_CATEGORIES_RESP* d = NULL;
size_t catCount = categories.size(), index = 0;
size_t pktLen = sizeof(__FCPKT_FORUM_GET_CATEGORIES_RESP) + ( (catCount-1) * sizeof(__FCPKT_FORUM_GET_CATEGORIES_RESP::category_info));
d = (__FCPKT_FORUM_GET_CATEGORIES_RESP*) new FCBYTE[ pktLen ];
memset(d, 0, pktLen);
d->category_count = (FCSHORT)catCount;
ForumCategory* pCat = NULL;
vector<ForumCategory*>::iterator it = categories.begin();
while ( it != categories.end() )
{
pCat = (*it);
d->categories[index].category_id = pCat->GetID();
d->categories[index].parent_id = pCat->GetParentID();
d->categories[index].thread_count = (FCULONG)pCat->GetPostCount();
strncpy( d->categories[index].name, pCat->GetName().c_str(), sizeof(d->categories[index].name) );
strncpy( d->categories[index].desc, pCat->GetDescription().c_str(), sizeof(d->categories[index].desc) );
it++;
index++;
}
// send the packet
PEPacketHelper::CreatePacket(*pkt, FCPKT_RESPONSE, FCMSG_FORUM_GET_CATEGORIES, ST_None);
PEPacketHelper::SetPacketData(*pkt,
(void*)d,
pktLen);
// send notification to Client
pkt->SetFieldValue("target", (void*)&clientSocket);
QueuePacket(pkt, pRouter);
// clear the data portion
delete [] (FCBYTE*)d;
}
开发者ID:carribus,项目名称:firecell,代码行数:38,代码来源:world_comms.cpp
示例3: EQApplicationPacket
void Client::SendLogServer()
{
EQApplicationPacket *outapp = new EQApplicationPacket(OP_LogServer, sizeof(LogServer_Struct));
LogServer_Struct *l=(LogServer_Struct *)outapp->pBuffer;
const char *wsn=WorldConfig::get()->ShortName.c_str();
memcpy(l->worldshortname,wsn,strlen(wsn));
if(RuleB(Mail, EnableMailSystem))
l->enablemail = 1;
if(RuleB(Chat, EnableVoiceMacros))
l->enablevoicemacros = 1;
l->enable_pvp = (RuleI(World, PVPSettings));
if(RuleB(World, IsGMPetitionWindowEnabled))
l->enable_petition_wnd = 1;
if(RuleI(World, FVNoDropFlag) == 1 || RuleI(World, FVNoDropFlag) == 2 && GetAdmin() > RuleI(Character, MinStatusForNoDropExemptions))
l->enable_FV = 1;
QueuePacket(outapp);
safe_delete(outapp);
}
开发者ID:jdewitt,项目名称:Server,代码行数:24,代码来源:client.cpp
示例4: EQApplicationPacket
void Client::SendAlternateAdvancementPoints() {
auto outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct));
AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer;
int i = 0;
for(auto &aa : zone->aa_abilities) {
uint32 charges = 0;
auto ranks = GetAA(aa.second->first_rank_id, &charges);
if(ranks) {
AA::Rank *rank = aa.second->GetRankByPointsSpent(ranks);
if(rank) {
aa2->aa_list[i].AA = rank->id;
aa2->aa_list[i].value = rank->total_cost;
aa2->aa_list[i].charges = charges;
i++;
}
}
}
aa2->aa_spent = GetSpentAA();
QueuePacket(outapp);
safe_delete(outapp);
}
开发者ID:af4t,项目名称:Server,代码行数:24,代码来源:aa.cpp
示例5: UpdateTimeOutTime
/// Update the WorldSession (triggered by World update)
bool WorldSession::Update(uint32 diff, PacketFilter& updater)
{
/// Update Timeout timer.
UpdateTimeOutTime(diff);
///- Before we process anything:
/// If necessary, kick the player from the character select screen
if (IsConnectionIdle())
m_Socket->CloseSocket();
///- Retrieve packets from the receive queue and call the appropriate handlers
/// not process packets if socket already closed
WorldPacket* packet = NULL;
//! Delete packet after processing by default
bool deletePacket = true;
//! To prevent infinite loop
WorldPacket* firstDelayedPacket = NULL;
//! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all
//! *properly timed* packets, and we're now at the part of the queue where we find
//! delayed packets that were re-enqueued due to improper timing. To prevent an infinite
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
//uint32 processedPackets = 0;
uint32 msTime = getMSTime();
uint32 currentMSTime = msTime;
//bool output = false;
std::list<std::pair<uint32, uint32> > processedOpcodes;
while (m_Socket && !m_Socket->IsClosed() &&
!_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
_recvQueue.next(packet, updater))
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: IN opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());
if (packet->GetOpcode() >= NUM_MSG_TYPES)
{
sLog->outError("SESSION: received non-existed opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());
sScriptMgr->OnUnknownPacketReceive(m_Socket, WorldPacket(*packet));
}
else
{
OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];
try
{
switch (opHandle.status)
{
case STATUS_LOGGEDIN:
if (!_player)
{
// skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets
//! If player didn't log out a while ago, it means packets are being sent while the server does not recognize
//! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.
if (!m_playerRecentlyLogout)
{
//! Prevent infinite loop
if (!firstDelayedPacket)
firstDelayedPacket = packet;
//! Because checking a bool is faster than reallocating memory
deletePacket = false;
QueuePacket(packet);
//! Log
sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s (0x%.4X) with with status STATUS_LOGGEDIN. "
"Player is currently not in world yet.", opHandle.name, packet->GetOpcode());
}
}
else if (_player->IsInWorld())
{
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle.handler)(*packet);
if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())
LogUnprocessedTail(packet);
}
// lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer
break;
case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:
if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout
LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",
"the player has not logged in yet and not recently logout");
else
{
// not expected _player or must checked in packet handler
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle.handler)(*packet);
if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())
LogUnprocessedTail(packet);
}
break;
case STATUS_TRANSFER:
if (!_player)
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");
else if (_player->IsInWorld())
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");
else
{
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
//.........这里部分代码省略.........
开发者ID:Allowed,项目名称:Strawberry335,代码行数:101,代码来源:WorldSession.cpp
示例6: sizeof
void Client::ProcessOP_Beg(APPLAYER* pApp)
{
/* if(pApp->size != sizeof(Beg_Struct))
{
cout << "Wrong size on OP_Beg. Got: " << pApp->size << ", Expected: " << sizeof(Beg_Struct) << endl;
return;
}*/
if(pApp->size = sizeof(Beg_Struct))
{
Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
Message(BLACK,"Begging makes zone a sad panda :( (Our struct is wrong)");
beg_info->success = 0;
QueuePacket(pApp);
}
else
{
//Yeahlight: Purge client's invisibility
CancelAllInvisibility();
Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
Mob* target = entity_list.GetMob(beg_info->target);
Mob* player = entity_list.GetMob(beg_info->begger);
//Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
// Validate Player
// Added this check to keep people from fudging packets to make
// mobs attack other through begging. Flag as a hack also.
if(this->GetID() != player->GetID())
{
cout << "[ hack ]" << this->GetName() << " is begging for another player: ";
cout << player->GetName() << endl;
// This will make the client not able to beg anymore.
// Could we send qa packet back with 'beg_info->success = 0?
// Nah, I'd rather just leave the hackers with a broken client. -neorab
return;
}
// Validate Time
// Should not be able to send two beg requests within 10 seconds.
// Flag beg spammers as hackers. Drop the packet and move on.
int32 time_to_beg = beg_timer->GetRemainingTime();
if(time_to_beg != 0)
{
cout << "[ hack ]" << player->GetName() << " is begging to fast. ";
cout << 10000 - time_to_beg << "ms since last beg." << endl;
// This will make the client not able to beg anymore.
return;
}
beg_timer->Start(10000);
// Validate Target
// Should not be able to beg from other players, corpses or pets.
// Basiclly, the client will have to have the same thing targeted
// as the packet says they do. If they target a pet and send a beg
// packet with the pet as the target, this won't catch it. But it'll
// stop the average dumbass forging packets.
Mob* tmptar = this->GetTarget();
if((tmptar->GetID() != target->GetID()) || target->IsNPC() != true)
{
cout << "[ hack ]" << player->GetName() << " is begging from: " << target->GetName();
cout << "but has [" << tmptar->GetName() << "] targeted." << endl;
// This will make the client not able to beg anymore.
return;
}
// Validate Skill
// Look the skill up, flag the account for hacks if they don't match.
int8 beg_skill = this->GetSkill(BEGGING);
if(beg_skill != beg_info->skill)
{
cout << "[ hack ]" << player->GetName() << " is trying to beg at " << beg_info->skill;
cout << "but is [" << beg_skill << "] skill." << endl;
// This will make the client not able to beg anymore.
return;
}
// Pets.
// You cannot succeed or crit fail on pets.
if(target->CastToNPC()->GetOwner() == 0)
{
// Roll The Dice for Success
// the threshold is the number you have to be under to have begged successfully
// skill level / 8000 (0 - 4% liner based on skill)
// + Charisma Modifier (same as skill level) * active charisma % (20% for ever 51 levels)
double success_threshold = ((double)beg_skill / 8000)
+ (( (int)((double)beg_skill / 51) * 0.20) * ((double)player->GetCHA() / 8500));
double the_dice = MakeRandomFloat(0.000, 1.000);
if(the_dice <= success_threshold)
{
char message[255];
sprintf(message, "%s says, \"Here %s, take this and LEAVE ME ALONE!\"", target->GetName(), player->GetName());
//.........这里部分代码省略.........
开发者ID:cavedude00,项目名称:eqmacemu,代码行数:101,代码来源:Beg.cpp
示例7: if
void CGameServerPlayer::ProcessScriptCommand(const PacketData& subPacket)
{
uint32 clientTime = *reinterpret_cast<const uint32*>(&subPacket[0x18]);
uint32 sourceId = *reinterpret_cast<const uint32*>(&subPacket[0x20]);
uint32 targetId = *reinterpret_cast<const uint32*>(&subPacket[0x24]);
const char* commandName = reinterpret_cast<const char*>(subPacket.data()) + 0x31;
CLog::GetInstance().LogDebug(LOG_NAME, "ProcessScriptCommand: %s Source Id = 0x%0.8X, Target Id = 0x%0.8X.", commandName, sourceId, targetId);
auto playerActor = m_instance.GetActor<CPlayerActor>(PLAYER_ID);
if(playerActor == nullptr)
{
CLog::GetInstance().LogError(LOG_NAME, "Failed to get player actor.");
return;
}
if(!strcmp(commandName, "commandRequest"))
{
//commandRequest (emote, changing equipment, ...)
playerActor->ProcessCommandRequest(targetId, subPacket);
}
else if(!strcmp(commandName, "commandContent"))
{
switch(targetId)
{
case 0xA0F05E9B:
//Quit
CLog::GetInstance().LogDebug(LOG_NAME, "Quit.");
m_disconnect = true;
break;
case 0xA0F05E9C:
//Teleport
CLog::GetInstance().LogDebug(LOG_NAME, "Teleport.");
m_disconnect = true;
break;
}
}
else if(!strcmp(commandName, "commandForced"))
{
playerActor->ProcessCommandForced(targetId);
}
else if(!strcmp(commandName, "commandDefault"))
{
playerActor->ProcessCommandDefault(targetId);
}
else if(!strcmp(commandName, "talkDefault"))
{
switch(targetId)
{
case 0x47A00007:
//Talking to the door inside the room
{
static const uint8 commandRequestPacket[] =
{
0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x00, 0x52, 0xE2, 0xA4, 0xEE, 0x3B, 0x01, 0x00, 0x00,
0xb0, 0x00, 0x03, 0x00, 0x41, 0x29, 0x9b, 0x02, 0x41, 0x29, 0x9b, 0x02, 0x00, 0xe0, 0xd2, 0xfe,
0x14, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xe9, 0xe0, 0x50, 0x00, 0x00, 0x00, 0x00,
0x41, 0x29, 0x9b, 0x02, 0x07, 0x00, 0xa0, 0x47, 0x01, 0x74, 0x61, 0x6c, 0x6b, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x9b, 0x29, 0x41, 0x06, 0xa0,
0xf1, 0xaf, 0xcd, 0x02, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x61, 0x6c, 0x6b, 0x57,
0x69, 0x74, 0x68, 0x49, 0x6e, 0x6e, 0x5f, 0x45, 0x78, 0x69, 0x74, 0x44, 0x6f, 0x6f, 0x72, 0x00,
0x05, 0x05, 0x05, 0x05, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xe8, 0x4e, 0x40, 0x00, 0x00, 0x00,
};
QueuePacket(PacketData(std::begin(commandRequestPacket), std::end(commandRequestPacket)));
}
break;
default:
#if 0
//Talking Test (doesn't work)
{
static const uint8 commandRequestPacket[] =
{
0x01, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x01, 0x00, 0xD2, 0x16, 0x9E, 0xEE, 0x3B, 0x01, 0x00, 0x00,
0xB0, 0x00, 0x03, 0x00, 0x41, 0x29, 0x9B, 0x02, 0x41, 0x29, 0x9B, 0x02, 0x00, 0xE0, 0xD2, 0xFE,
0x14, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x14, 0xED, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00,
0x41, 0x29, 0x9B, 0x02, 0x82, 0x00, 0x70, 0x46, 0x01, 0x74, 0x61, 0x6C, 0x6B, 0x44, 0x65, 0x66,
0x61, 0x75, 0x6C, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x45,
0x76, 0x65, 0x6E, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xA0, 0xF1, 0xAF, 0xCD, 0x06, 0xA0,
0xF1, 0xB4, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x03, 0xF1, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xB8, 0x45, 0x40, 0x00, 0x00, 0x00,
};
QueuePacket(PacketData(std::begin(commandRequestPacket), std::end(commandRequestPacket)));
}
#endif
m_disconnect = true;
break;
}
}
else
{
//.........这里部分代码省略.........
开发者ID:ChowZenki,项目名称:SeventhUmbral,代码行数:101,代码来源:GameServerPlayer.cpp
示例8: return
bool Client::UseDiscipline(uint32 spell_id, uint32 target) {
// Dont let client waste a reuse timer if they can't use the disc
if (IsStunned() || IsFeared() || IsMezzed() || IsAmnesiad() || IsPet())
{
return(false);
}
//make sure we have the spell...
int r;
for(r = 0; r < MAX_PP_DISCIPLINES; r++) {
if(m_pp.disciplines.values[r] == spell_id)
break;
}
if(r == MAX_PP_DISCIPLINES)
return(false); //not found.
//Check the disc timer
pTimerType DiscTimer = pTimerDisciplineReuseStart + spells[spell_id].EndurTimerIndex;
if(!p_timers.Expired(&database, DiscTimer)) {
/*char val1[20]={0};*/ //unused
/*char val2[20]={0};*/ //unused
uint32 remain = p_timers.GetRemainingTime(DiscTimer);
//Message_StringID(0, DISCIPLINE_CANUSEIN, ConvertArray((remain)/60,val1), ConvertArray(remain%60,val2));
Message(0, "You can use this discipline in %d minutes %d seconds.", ((remain)/60), (remain%60));
return(false);
}
//make sure we can use it..
if(!IsValidSpell(spell_id)) {
Message(13, "This tome contains invalid knowledge.");
return(false);
}
//can we use the spell?
const SPDat_Spell_Struct &spell = spells[spell_id];
uint8 level_to_use = spell.classes[GetClass() - 1];
if(level_to_use == 255) {
Message(13, "Your class cannot learn from this tome.");
//should summon them a new one...
return(false);
}
if(level_to_use > GetLevel()) {
Message_StringID(13, DISC_LEVEL_USE_ERROR);
//should summon them a new one...
return(false);
}
if(GetEndurance() > spell.EndurCost) {
SetEndurance(GetEndurance() - spell.EndurCost);
} else {
Message(11, "You are too fatigued to use this skill right now.");
return(false);
}
if(spell.recast_time > 0)
{
uint32 reduced_recast = spell.recast_time / 1000;
reduced_recast -= CastToClient()->GetFocusEffect(focusReduceRecastTime, spell_id);
if(reduced_recast < 0)
reduced_recast = 0;
CastSpell(spell_id, target, DISCIPLINE_SPELL_SLOT, -1, -1, 0, -1, (uint32)DiscTimer, reduced_recast);
if(spells[spell_id].EndurTimerIndex < MAX_DISCIPLINE_TIMERS)
{
EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct));
DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer;
dts->TimerID = spells[spell_id].EndurTimerIndex;
dts->Duration = reduced_recast;
QueuePacket(outapp);
safe_delete(outapp);
}
}
else
{
CastSpell(spell_id, target, DISCIPLINE_SPELL_SLOT);
}
return(true);
}
开发者ID:regneq,项目名称:projecteqemu,代码行数:79,代码来源:effects.cpp
示例9: TestCaseDeviceSetRegister
void TestCaseDeviceSetRegister()
{
struct TransactionLayerPacket *PacketQueueStore;
int DeviceInitRetryCounter;
int PacketWasAccepted;
//init the device
if( HostState.DeviceFinishedInitialize != 1 || HostState.DeviceFinishedEnum != 1 )
TestCaseDeviceInit();
//read configs
if( DeviceState.DeviceLinkTranSettingReg.Fields.MAX_BLK_LEN == 0 || DeviceState.DeviceLinkTranSettingReg.Fields.N_FCU == 0 )
TestCaseDeviceCapabilities();
/////////////////////////////////////////
// Write the value of CFG Reg MAX_BLKLEN to determine block length - page 164 - begin
/////////////////////////////////////////
//get a packet store from queue
PacketQueueStore = GetPacketQueueStore();
// can be used to ensure we are reading a packet that we were waiting the reply for. Can be used for async communication
InitNewHostDeviceTransaction();
//build packet to be sent
{
u_CFG_LINK_TRAN_REG RegValue;
EmbededMemCpy( RegValue.DataC, DeviceState.DeviceLinkTranReg.DataC, sizeof( DeviceState.DeviceLinkTranReg.DataC ) );
RegValue.Fields.MaxBlkLen = 64; //test value ! Change it later
BuildPcktCCMDDeviceSetReg( PacketQueueStore->Packet, &PacketQueueStore->PacketSize, RA_Configuration + RA_CFG_GENERIC_SETTINGS, DeviceState.DeviceLinkTranReg.DataC );
}
//queue the packet to be sent to the device
PacketQueueStore->SendCount = 0;
DeviceInitRetryCounter = 0;
PacketWasAccepted = 0;
while( PacketWasAccepted == 0 && DeviceInitRetryCounter < MAX_PACKET_RESEND_ON_NO_REPLY )
{
// queue the packet to be sent. Could be an async implementation in the future
PacketQueueStore->SendCount++;
QueuePacket( PacketQueueStore );
//non async implementation of data send
SendPacketToDevice( PacketQueueStore );
//wait for device reply
WaitDevicePacketReply( PacketQueueStore );
// after MAX_PACKET_RESEND_ON_NO_REPLY send tries Host needs to treat init configuration as BAD
ParsePcktCCMDDeviceRegisterSet( PacketQueueStore, RA_Configuration + RA_CFG_GENERIC_SETTINGS );
DeviceInitRetryCounter++;
}
if( DeviceInitRetryCounter >= MAX_PACKET_RESEND_ON_NO_REPLY )
assert( 0 );
/////////////////////////////////////////
// Write the value of CFG Reg MAX_BLKLEN to determine block length - page 164 - end
/////////////////////////////////////////
/////////////////////////////////////////
// Read the value of CFG Reg MAX_BLKLEN to determine block length - page 164 - begin
/////////////////////////////////////////
//get a packet store from queue
PacketQueueStore = GetPacketQueueStore();
// can be used to ensure we are reading a packet that we were waiting the reply for. Can be used for async communication
InitNewHostDeviceTransaction();
//build packet to be sent
BuildPcktCCMDDeviceQueryReg( PacketQueueStore->Packet, &PacketQueueStore->PacketSize, RA_Configuration + RA_CFG_LINK_TRAN );
//queue the packet to be sent to the device
PacketQueueStore->SendCount = 0;
DeviceInitRetryCounter = 0;
PacketWasAccepted = 0;
while( PacketWasAccepted == 0 && DeviceInitRetryCounter < MAX_PACKET_RESEND_ON_NO_REPLY )
{
// queue the packet to be sent. Could be an async implementation in the future
PacketQueueStore->SendCount++;
QueuePacket( PacketQueueStore );
//non async implementation of data send
SendPacketToDevice( PacketQueueStore );
//wait for device reply
WaitDevicePacketReply( PacketQueueStore );
// after MAX_PACKET_RESEND_ON_NO_REPLY send tries Host needs to treat init configuration as BAD
PacketWasAccepted = ParsePcktCCMDDeviceRegisterQuery( PacketQueueStore, RA_Configuration + RA_CFG_LINK_TRAN );
DeviceInitRetryCounter++;
}
if( DeviceInitRetryCounter >= MAX_PACKET_RESEND_ON_NO_REPLY )
assert( 0 );
//.........这里部分代码省略.........
开发者ID:Tudi,项目名称:UHS-II-Benchmarker,代码行数:101,代码来源:TestCaseSetRegister.c
示例10: QueuePacket
HRESULT CBaseSplitterOutputPin::QueueEndOfStream()
{
return QueuePacket(CAutoPtr<Packet>()); // NULL means EndOfStream
}
开发者ID:DanHenebry,项目名称:mpc-hc,代码行数:4,代码来源:BaseSplitter.cpp
示例11: GetEXPForLevel
void Client::SetLevel(uint8 set_level, bool command)
{
if (GetEXPForLevel(set_level) == 0xFFFFFFFF) {
Log.Out(Logs::General, Logs::Error, "Client::SetLevel() GetEXPForLevel(%i) = 0xFFFFFFFF", set_level);
return;
}
EQApplicationPacket* outapp = new EQApplicationPacket(OP_LevelUpdate, sizeof(LevelUpdate_Struct));
LevelUpdate_Struct* lu = (LevelUpdate_Struct*)outapp->pBuffer;
lu->level = set_level;
if(m_pp.level2 != 0)
lu->level_old = m_pp.level2;
else
lu->level_old = level;
level = set_level;
if(IsRaidGrouped()) {
Raid *r = this->GetRaid();
if(r){
r->UpdateLevel(GetName(), set_level);
}
}
if(set_level > m_pp.level2) {
if(m_pp.level2 == 0)
m_pp.points += 5;
else
m_pp.points += (5 * (set_level - m_pp.level2));
m_pp.level2 = set_level;
}
if(set_level > m_pp.level) {
parse->EventPlayer(EVENT_LEVEL_UP, this, "", 0);
/* QS: PlayerLogLevels */
if (RuleB(QueryServ, PlayerLogLevels)){
std::string event_desc = StringFormat("Leveled UP :: to Level:%i from Level:%i in zoneid:%i instid:%i", set_level, m_pp.level, this->GetZoneID(), this->GetInstanceID());
QServ->PlayerLogEvent(Player_Log_Levels, this->CharacterID(), event_desc);
}
}
else if (set_level < m_pp.level){
/* QS: PlayerLogLevels */
if (RuleB(QueryServ, PlayerLogLevels)){
std::string event_desc = StringFormat("Leveled DOWN :: to Level:%i from Level:%i in zoneid:%i instid:%i", set_level, m_pp.level, this->GetZoneID(), this->GetInstanceID());
QServ->PlayerLogEvent(Player_Log_Levels, this->CharacterID(), event_desc);
}
}
m_pp.level = set_level;
if (command){
m_pp.exp = GetEXPForLevel(set_level);
Message(CC_Yellow, "Welcome to level %i!", set_level);
lu->exp = 0;
}
else {
float tmpxp = (float) ( (float) m_pp.exp - GetEXPForLevel( GetLevel() )) / ( (float) GetEXPForLevel(GetLevel()+1) - GetEXPForLevel(GetLevel()));
lu->exp = (uint32)(330.0f * tmpxp);
}
QueuePacket(outapp);
safe_delete(outapp);
this->SendAppearancePacket(AT_WhoLevel, set_level); // who level change
Log.Out(Logs::General, Logs::Normal, "Setting Level for %s to %i", GetName(), set_level);
CalcBonuses();
if(!RuleB(Character, HealOnLevel)) {
int mhp = CalcMaxHP();
if(GetHP() > mhp)
SetHP(mhp);
}
else {
SetHP(CalcMaxHP()); // Why not, lets give them a free heal
}
if(!RuleB(Character, ManaOnLevel))
{
int mp = CalcMaxMana();
if(GetMana() > mp)
SetMana(mp);
}
else
{
SetMana(CalcMaxMana()); // Why not, lets give them a free heal
}
SendHPUpdate();
SendManaUpdate();
UpdateWho();
Save();
}
开发者ID:regneq,项目名称:Server,代码行数:89,代码来源:exp.cpp
示例12: sizeof
void Client::SendAlternateAdvancementRank(int aa_id, int level) {
if(!zone)
return;
auto ability_rank = zone->GetAlternateAdvancementAbilityAndRank(aa_id, level);
auto ability = ability_rank.first;
auto rank = ability_rank.second;
if(!ability) {
return;
}
if(!(ability->classes & (1 << GetClass()))) {
return;
}
if(!CanUseAlternateAdvancementRank(rank)) {
return;
}
int size = sizeof(AARankInfo_Struct) + (sizeof(AARankEffect_Struct) * rank->effects.size()) + (sizeof(AARankPrereq_Struct) * rank->prereqs.size());
auto outapp = new EQApplicationPacket(OP_SendAATable, size);
AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer;
aai->id = rank->id;
aai->upper_hotkey_sid = rank->upper_hotkey_sid;
aai->lower_hotkey_sid = rank->lower_hotkey_sid;
aai->title_sid = rank->title_sid;
aai->desc_sid = rank->desc_sid;
aai->cost = rank->cost;
aai->seq = aa_id;
aai->type = ability->type;
aai->spell = rank->spell;
aai->spell_type = rank->spell_type;
aai->spell_refresh = rank->recast_time;
aai->classes = ability->classes;
aai->level_req = rank->level_req;
aai->current_level = level;
aai->max_level = ability->GetMaxLevel(this);
aai->prev_id = rank->prev_id;
if((rank->next && !CanUseAlternateAdvancementRank(rank->next)) || ability->charges > 0) {
aai->next_id = -1;
} else {
aai->next_id = rank->next_id;
}
aai->total_cost = rank->total_cost;
aai->expansion = rank->expansion;
aai->category = ability->category;
aai->charges = ability->charges;
aai->grant_only = ability->grant_only;
aai->total_effects = rank->effects.size();
aai->total_prereqs = rank->prereqs.size();
outapp->SetWritePosition(sizeof(AARankInfo_Struct));
for(auto &effect : rank->effects) {
outapp->WriteSInt32(effect.effect_id);
outapp->WriteSInt32(effect.base1);
outapp->WriteSInt32(effect.base2);
outapp->WriteSInt32(effect.slot);
}
for(auto &prereq : rank->prereqs) {
outapp->WriteSInt32(prereq.first);
outapp->WriteSInt32(prereq.second);
}
QueuePacket(outapp);
safe_delete(outapp);
}
开发者ID:af4t,项目名称:Server,代码行数:70,代码来源:aa.cpp
示例13: QueuePacket
HRESULT CLAVOutputPin::QueueEndOfStream()
{
return QueuePacket(NULL); // NULL means EndOfStream
}
开发者ID:cynics,项目名称:LAVFilters,代码行数:4,代码来源:OutputPin.cpp
示例14: QueuePacket
HRESULT CLAVOutputPin::QueueEndOfStream()
{
return QueuePacket(nullptr); // nullptr means EndOfStream
}
开发者ID:Nevcairiel,项目名称:LAVFilters,代码行数:4,代码来源:OutputPin.cpp
示例15: UpdateTimeOutTime
/// Update the WorldSession (triggered by World update)
bool WorldSession::Update(uint32 diff, PacketFilter& updater)
{
/// Update Timeout timer.
UpdateTimeOutTime(diff);
///- Before we process anything:
/// If necessary, kick the player from the character select screen
if (IsConnectionIdle())
m_Socket->CloseSocket();
const uint32 opcodeMinTime = 50;
uint32 opcodeStartTime;
uint32 opcodeProcessTime;
///- Retrieve packets from the receive queue and call the appropriate handlers
/// not process packets if socket already closed
WorldPacket* packet = NULL;
//! Delete packet after processing by default
bool deletePacket = true;
//! To prevent infinite loop
WorldPacket* firstDelayedPacket = NULL;
//! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all
//! *properly timed* packets, and we're now at the part of the queue where we find
//! delayed packets that were re-enqueued due to improper timing. To prevent an infinite
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
while (m_Socket && !m_Socket->IsClosed() &&
!_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
_recvQueue.next(packet, updater))
{
opcodeStartTime = getMSTime();
OpcodeHandler const* opHandle = opcodeTable[packet->GetOpcode()];
try
{
switch (opHandle->Status)
{
case STATUS_LOGGEDIN:
if (!_player)
{
// skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets
//! If player didn't log out a while ago, it means packets are being sent while the server does not recognize
//! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.
if (!m_playerRecentlyLogout)
{
//! Prevent infinite loop
if (!firstDelayedPacket)
firstDelayedPacket = packet;
//! Because checking a bool is faster than reallocating memory
deletePacket = false;
QueuePacket(packet);
//! Log
sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s with with status STATUS_LOGGEDIN. "
"Player is currently not in world yet.", GetOpcodeNameForLogging(packet->GetOpcode()).c_str());
}
}
else if (_player->IsInWorld())
{
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle->Handler)(*packet);
LogUnprocessedTail(packet);
}
// lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer
break;
case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:
if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout
LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",
"the player has not logged in yet and not recently logout");
else
{
// not expected _player or must checked in packet hanlder
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle->Handler)(*packet);
LogUnprocessedTail(packet);
}
break;
case STATUS_TRANSFER:
if (!_player)
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");
else if (_player->IsInWorld())
LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");
else
{
sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));
(this->*opHandle->Handler)(*packet);
LogUnprocessedTail(packet);
}
break;
case STATUS_AUTHED:
// prevent cheating with skip queue wait
if (m_inQueue)
{
LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");
break;
}
// some auth opcodes can be recieved before STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes
// however when we recieve CMSG_CHAR_ENUM we are surely no longer during the logout process.
if (packet->GetOpcode() == CMSG_CHAR_ENUM)
//.........这里部分代码省略.........
开发者ID:Cryostorm,项目名称:InfinityCore,代码行数:101,代码来源:WorldSession.cpp
示例16: APPLAYER
bool Client::BindWound(Mob* bindtar,bool fail){
APPLAYER* bwout_app = new APPLAYER(OP_BindWound,sizeof(BindWound_Struct));
BindWound_Struct* bwout = (BindWound_Struct*)bwout_app->pBuffer;
if(!fail){
if(GetFeigned()){ // Break Feign Death for Bind Wound
SetFeigned(false); //
}
int cap = 50; // Set % Cap/Heal Cap
int hp_cap = bindtar->GetMaxHP()/2; //
if(GetClass() == MONK && GetSkill(BIND_WOUND) > 200){ //
cap = 70; //
hp_cap += bindtar->GetMaxHP()/5; //
}
if(!bindwound_timer->Enabled()){ // Begin Bind Wound
if(bindtar->GetHP() >= hp_cap){ // INITIAL CAP CHECK
Message(DARK_BLUE, "You cannot bandage your target past %d percent of their hit points.", cap);
bwout->type = 3; //
QueuePacket(bwout_app); //
bwout->type = 2; //
QueuePacket(bwout_app); //
safe_delete(bwout_app); //
return true;
}
int16 bndg_slot = FindItemTypeInInventory(ItemTypeBandage); // Consume Bandage
RemoveOneCharge(bndg_slot,true); //
bindwound_timer->Start(10000); // Start Timer
bindwound_target = bindtar;
bwout->type = 3; // Unlock Interface
QueuePacket(bwout_app); //
bwout->type = 0; //
if(!bindtar){ // Target Dead
bwout->type = 4; //
QueuePacket(bwout_app); //
bwout->type = 0; //
bindwound_timer->Disable(); //
bindwound_target = 0; //
}
else if(bindtar!=this) // Send Bind Message to target if not binding self
bindtar->CastToClient()->Message(DARK_BLUE,"You are being bandaged. Stay relatively still.");
}
else{ // END Bind Wound
bindwound_timer->Disable(); // Stop Timer
bindwound_target = 0;
if(!bindtar){ // Target Not Found
bwout->type = 5; //
QueuePacket(bwout_app); //
bwout->type = 0; //
}
if((!GetFeigned() && bindtar->DistNoRoot(this->CastToMob()) <= 400)){ //// **** TAKEN FROM EQEMU, FD Check/Distance?
bwout->type = 1; // Finish Bind
QueuePacket(bwout_app); //
bwout->type = 0; //
if(this!=bindtar) // Message to target
bindtar->CastToClient()->Message(YELLOW,"The bandaging is complete.");
CheckAddSkill(BIND_WOUND); // Check Skill Up
if(bindtar->GetHP() < hp_cap){ // END CAP CHECK (Does not include heal amount)
int heal = 3; // Set Heal Amount
if(GetSkill(BIND_WOUND) > 200) // //
heal += GetSkill(BIND_WOUND)*4/10; // //
else if(GetSkill(BIND_WOUND) >= 10) // //
heal += GetSkill(BIND_WOUND)/4; // //
bindtar->SetHP(bindtar->GetHP()+heal); // Set Hp + Update
bindtar->SendHPUpdate(); //
}
else{ // Over Cap
Message(DARK_BLUE, "You cannot bandage your target past %d percent of their hit points.", cap);
if(this != bindtar) //
bindtar->CastToClient()->Message(DARK_BLUE, "You cannot be bandaged past %d percent of your max hit points.",cap);
}
}
else if(bindtar!=this){ // Failed Moved/Moved Away
bwout->type = 6; //
QueuePacket(bwout_app); //
bwout->type = 0; //
}
else{
//Feigned/Out of Range and binding self Not sure if anything needs to go here or not
}
}
}
//.........这里部分代码省略.........
开发者ID:aceoyame,项目名称:OpenEQC,代码行数:101,代码来源:BindWound.cpp
示例17: UpdateTimeOutTime
/// Update the WorldSession (triggered by World update)
bool WorldSession::Update(uint32 diff, PacketFilter& updater)
{
/// Update Timeout timer.
UpdateTimeOutTime(diff);
///- Before we process anything:
/// If necessary, kick the player from the character select screen
//Playerbot
/*
if (IsConnectionIdle())
m_Socket->CloseSocket();
*/
///- Retrieve packets from the receive queue and call the appropriate handlers
/// not process packets if socket already closed
WorldPacket* packet = NULL;
//! Delete packet after processing by default
bool deletePacket = true;
//! To prevent infinite loop
WorldPacket* firstDelayedPacket = NULL;
//! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all
//! *properly timed* packets, and we're now at the part of the queue where we find
//! delayed packets that were re-enqueued due to improper timing. To prevent an infinite
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
while (m_Socket && !m_Socket->IsClosed() &
|
请发表评论