void FdNetDevice::ReceiveCallback (uint8_t *buf, ssize_t len) { NS_LOG_FUNCTION (this << buf << len); bool skip = false; { CriticalSection cs (m_pendingReadMutex); if (m_pendingReadCount >= m_maxPendingReads) { //XXX: Packet dropped! skip = true; } else { ++m_pendingReadCount; } } if (skip) { struct timespec time = { 0, 100000000L }; // 100 ms nanosleep (&time, NULL); } else { Simulator::ScheduleWithContext (m_nodeId, Time (0), MakeEvent (&FdNetDevice::ForwardUp, this, buf, len)); } }
// Initialize algorithm GaMultithreadingAlgorithm::GaMultithreadingAlgorithm(const GaMultithreadingAlgorithmParams& parameters) : _parametersChange(false), _workerIdCounter(0) { _numberOfThreads = parameters.GetNumberOfWorkers() + 1; // make thread pool _threads = new GaThread*[ _numberOfThreads ]; // defalut thread parameters GaThreadParameter p; p._functionParameters = this; // initialize control and worker threads for( int i = 0; i < _numberOfThreads; i++ ) { p._functionPointer = !i ? ControlFlowWrapper : WorkFlowWrapper; _threads[ i ] = new GaThread( p, false ); } // initialize of semaphores for synchronization of worker threads MakeSemaphore( _workerForkSync, _numberOfThreads - 1, 0 ); MakeSemaphore( _workerJoinSync, _numberOfThreads - 1, 0 ); MakeEvent( _controlSync, 0 ); }
bool CLoginModule::OnPlayerLogout(PersonID id) { CPlayer* player = PlayerMgr.GetObj(id); if (!player) return false; //下线前同步属性存盘 char timestr[32] = { 0 }; DatatimeToString(timestr); player->SetFieldStr(Role_Attrib_LogoutTime, timestr, false, true); //登出事件 CEvent* evnt = MakeEvent(Event_Player_Logout, player->GetID(), NULL, true); player->OnEvent(evnt); //同步DataServer退出 DataModule.syncRemove(player, GameServer.getServerSock(CBaseServer::Linker_Server_Data)); LOGGER_NOTICE("[Logout] Online User:"******" Player:"INT64_FMT, player->GetFieldI64(Role_Attrib_UserID), id); UserMgr.Delete(player->GetFieldI64(Role_Attrib_UserID)); PlayerMgr.Delete(id); return true; }
bool CLoginModule::OnPlayerLogin(CPlayer* player) { if( !player ) return false; _OnPlayerSync(player); //执行脚本 LuaParam param[1]; param[0].SetDataNum(player->GetID()); LuaEngine.RunLuaFunction("OnLogin", "Player", NULL, param, 1); char timestr[32] = { 0 }; DatatimeToString(timestr); player->SetFieldStr(Role_Attrib_LoginTime, timestr, false, true); player->SetOnline(Online_Flag_On); player->m_ItemUnit.GainItem(10001001, Item_Reason_UnKonw); CEvent* evnt = MakeEvent(Event_Player_Login, player->GetID(), NULL, true); player->OnEvent(evnt); LOGGER_NOTICE("[Login] Online User:"******" Player:"INT64_FMT" Name:%s", player->GetFieldI64(Role_Attrib_UserID), player->GetID(), player->GetName().c_str()); return true; }
void Check( sc::fifo_scheduler<> & scheduler, const sc::fifo_scheduler<>::processor_handle & processor, int ctorArgs ) { refArg1 = 6; refArg2 = 5; refArg3 = 4; refArg4 = 3; refArg5 = 2; refArg6 = 1; // Make sure the processor has been created RunScheduler( scheduler, 1UL ); refArg1 = refArg2 = refArg3 = refArg4 = refArg5 = refArg6 = 0; scheduler.initiate_processor( processor ); // This event triggers the queueing of another event, which itself // terminates the machine ... scheduler.queue_event( processor, MakeEvent( new EvCheckCtorArgs( ctorArgs ) ) ); // ... that's why 3 instead of two events must have been processed RunScheduler( scheduler, 3UL ); // Since the machine has been terminated, this event will be ignored scheduler.queue_event( processor, MakeEvent( new EvFail() ) ); RunScheduler( scheduler, 1UL ); // Check that we can reinitiate the machine scheduler.initiate_processor( processor ); scheduler.queue_event( processor, MakeEvent( new EvCheckCtorArgs( ctorArgs ) ) ); RunScheduler( scheduler, 3UL ); // Check that we are terminated again scheduler.queue_event( processor, MakeEvent( new EvFail() ) ); RunScheduler( scheduler, 1UL ); scheduler.destroy_processor( processor ); // The following will simply be ignored because the processor has already // be destroyed scheduler.initiate_processor( processor ); scheduler.queue_event( processor, MakeEvent( new EvCheckCtorArgs( ctorArgs ) ) ); RunScheduler( scheduler, 3UL ); }
sc::result react( const EvCheckCtorArgs & ev ) { BOOST_REQUIRE( ev.expectedArgs_ == outermost_context().CtorArgs() ); outermost_context_type & machine = outermost_context(); machine.my_scheduler().queue_event( machine.my_handle(), MakeEvent( new EvTerminate() ) ); return discard_event(); }
void CFighter::OnLevelup(int up) { ChangeFieldInt(Role_Attrib_Level, up, true); InitBaseAttr(true); //SyncFieldToData("attr"); if( this->IsPlayer() ) { CEvent* ev = MakeEvent(Event_Player_Levelup, GetID(), (int64)GetFieldInt(Role_Attrib_Level), NULL, true); OnEvent(ev); } else { CPlayer* player = this->GetPlayer(); if( player ) { CEvent* ev = MakeEvent(Event_Hero_Levelup, player->GetID(), GetID(), (int64)GetFieldInt(Role_Attrib_Level), NULL, true); player->OnEvent(ev); } } }
bool CLoginModule::_HandlePacket_PlayerOnCreate(Packet* pack) { if( !pack ) return false; Message::CheckNameResponse msg; PROTOBUF_CMD_PARSER( pack, msg ); CPlayer* player = PlayerMgr.GetObj( msg.pid() ); if( !player ) return false; if( !msg.result() ) { NoticeModule.SendErrorMsg(player->GetGateSocket(), player->GetFieldI64(Role_Attrib_UserID), Error_Create_NameRepeat); LOGGER_DEBUG("[Login] Check Name Repeat:%s User:"******"OnCreate", "Player", NULL, param, 1) ) { LOGGER_DEBUG("[Login] RunLuaFunction Error, Player:"INT64_FMT" User:"******"player", GameServer.getServerSock(CBaseServer::Linker_Server_Data)); CEvent* evnt = MakeEvent(Event_Player_Create, player->GetID(), player->GetFieldI64(Role_Attrib_UserID), NULL, true); player->OnEvent(evnt); OnPlayerLogin(player); return true; }
void cGirlTorture::add_trait(string trait, int pc) { if (m_Girl->has_trait(trait)) return; /* * WD: To balance a crash bug workaround for Job Torturer * unable to call GirlGangFight() * Halve chance of gaining trait */ if (!m_TorturedByPlayer) pc /= 2; if (!g_Dice.percent(pc)) return; string sMsg = m_Girl->m_Realname + gettext(" has gained trait \"") + trait + gettext("\" from being tortured."); if (m_TorturedByPlayer) { g_MessageQue.AddToQue(sMsg, 2); m_Girl->m_Events.AddMessage(sMsg, IMGTYPE_TORTURE, EVENT_WARNING); } else MakeEvent(sMsg); // Add trait m_Girl->add_trait(trait); }
RageEvent::RageEvent( CString name ): RageMutex(name) { m_pEvent = MakeEvent( m_pMutex ); }
CEvent* MakeEvent(Event_ID nEventID,PersonID PID,char* szParam1,bool bUpdateDB) { return MakeEvent(nEventID,PID,-1,-1,-1,-1,-1,-1,szParam1,bUpdateDB); }
CEvent* MakeEvent(Event_ID nEventID,PersonID PID,int64 nParam1, int64 nParam2, int64 nParam3,char* szParam1,bool bUpdateDB) { return MakeEvent(nEventID,PID,nParam1,nParam2,nParam3,-1,-1,-1,szParam1,bUpdateDB); }
bool cGirlTorture::IsGirlInjured(unsigned int unModifier) { // modifier: 5 = 5% chance, 10 = 10% chance // Sanity check, Can't get injured if (m_Girl->has_trait("Incorporeal")) return false; /* * WD Injury was only possible if girl is pregnant or * hasn't got the required traits. * * Now check for injury first * Use usigned int so can't pass negative chance */ string sMsg; string sGirlName = m_Girl->m_Realname; int nMod = static_cast<int>(unModifier); if (cfg.initial.torture_mod() < 0){ nMod += nMod; } if (m_Girl->has_trait("Fragile")) nMod += nMod; // nMod *= 2; if (m_Girl->has_trait("Tough")) nMod /= 2; if (nMod < 1) nMod = 1; // `J` always at least a 1% chance // Did the girl get injured if (!g_Dice.percent(nMod)) return false; /* * INJURY PROCESSING * Only injured girls continue past here */ // Post any outstanding Player messages if (m_TorturedByPlayer && !m_Message.empty()) { g_MessageQue.AddToQue(m_Message, 0); m_Girl->m_Events.AddMessage(m_Message, IMGTYPE_TORTURE, EVENT_SUMMARY); // `J` added m_Message = sGirlName + ": "; } // getting hurt badly could lead to scars if (g_Dice.percent(nMod * 2) && !m_Girl->has_trait("Small Scars") && !m_Girl->has_trait("Cool Scars") && !m_Girl->has_trait("Horrific Scars")) { int chance = g_Dice % 6; if (chance == 0) { m_Girl->add_trait("Horrific Scars", false); if (m_TorturedByPlayer) m_Message += gettext("She was badly injured, and now has to deal with Horrific Scars.\n"); else MakeEvent(sGirlName + gettext(" was badly injured, and now has Horrific Scars.\n")); } else if (chance <= 2) { m_Girl->add_trait("Small Scars", false); if (m_TorturedByPlayer) m_Message += gettext("She was injured and now has a couple of Small Scars.\n"); else MakeEvent(sGirlName + gettext(" was injured, and now has Small Scars.\n")); } else { m_Girl->add_trait("Cool Scars", false); if (m_TorturedByPlayer) m_Message += gettext("She was injured and scarred. As scars go however, at least they are pretty Cool Scars.\n"); else MakeEvent(sGirlName + gettext(" was injured and scarred. She now has Cool Scars.\n")); } } // in rare cases, she might even lose an eye if (g_Dice.percent((nMod / 2)) && !m_Girl->has_trait("One Eye") && !m_Girl->has_trait("Eye Patch")) { int chance = g_Dice % 3; if (chance == 0) { m_Girl->add_trait("One Eye", false); if (m_TorturedByPlayer) m_Message += gettext("Oh, no! She was badly injured, and now only has One Eye!\n"); else MakeEvent(sGirlName + gettext(" was badly injured and lost an eye.\n")); } else { m_Girl->add_trait("Eye Patch", false); if (m_TorturedByPlayer) m_Message += gettext("She was injured and lost an eye, but at least she has a cool Eye Patch to wear.\n"); else MakeEvent(sGirlName + gettext(" was injured and lost an eye, but at least she has a cool Eye Patch to wear.\n")); } } // or lose tough or become fragile if (m_Girl->has_trait("Tough")) { if (g_Dice.percent(nMod)) { g_Girls.RemoveTrait(m_Girl, "Tough", false); if (m_TorturedByPlayer) m_Message += gettext("Her body has become less Tough due to the extent of her injuries.\n"); else MakeEvent("Due to " + sGirlName + gettext(" injuries her body has become less Tough.\n")); } } else if (!m_Girl->has_trait("Fragile")) { if (g_Dice.percent(nMod / 2)) { m_Girl->add_trait("Fragile", false); if (m_TorturedByPlayer) m_Message += gettext("Her body has become rather Fragile due to the extent of her injuries.\n"); else MakeEvent("Due to " + sGirlName + gettext(" injuries her body has become fragile.\n")); } } // and if pregnant, she might lose the baby; I'll assume inseminations can't be aborted so easily if ((m_Girl->carrying_human() && g_Dice.percent(nMod * 2)) || (m_Girl->carrying_monster() && g_Dice.percent(nMod))) // `J` added insemination loss chance { // unintended abortion time //injured = true; m_Girl->m_ChildrenCount[CHILD08_MISCARRIAGES]++; m_Girl->clear_pregnancy(); m_Girl->happiness(-20); m_Girl->spirit(-5); if (m_TorturedByPlayer) m_Message += gettext("Her unborn child has been lost due to the injuries she sustained, leaving her quite distraught.\n"); else MakeEvent(gettext("Due to ") + sGirlName + gettext(" injuries she has had a miscarriage, leaving her quite distraught.\n")); } int damage = 5 + g_Dice % 10; // Lose between 5 - 14 hp if (cfg.initial.torture_mod() < 0){ damage += damage / 2; } // `J` Lose between 7 - 21 hp if harsh torture m_Girl->health(-damage); // Post any new Player messages in Red Message Box Colour 1 if (m_TorturedByPlayer && !m_Message.empty() && m_Message != sGirlName + ": ") { g_MessageQue.AddToQue(m_Message, COLOR_RED); m_Girl->m_Events.AddMessage(m_Message, IMGTYPE_TORTURE, EVENT_DAYSHIFT); // `J` added m_Message = sGirlName + ": "; } return true; }