Exemplo n.º 1
0
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 ); 
	}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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 );
}
Exemplo n.º 6
0
 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();
 }
Exemplo n.º 7
0
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);
		}
	}
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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);
}
Exemplo n.º 10
0
RageEvent::RageEvent( CString name ):
	RageMutex(name)
{
	m_pEvent = MakeEvent( m_pMutex );
}
Exemplo n.º 11
0
CEvent* MakeEvent(Event_ID nEventID,PersonID PID,char* szParam1,bool bUpdateDB)
{
	return MakeEvent(nEventID,PID,-1,-1,-1,-1,-1,-1,szParam1,bUpdateDB);
}
Exemplo n.º 12
0
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);
}
Exemplo n.º 13
0
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;
}