Exemplo n.º 1
0
//用户起来
bool __cdecl CTableFrameSink::OnActionUserStandUp(WORD wChairID, IServerUserItem * pIServerUserItem, bool bLookonUser)
{        
	CountDownTime(wChairID , TRUE);
	/*OnActionUserReady(INVALID_CHAIR , NULL , NULL , INVALID_WORD);*/
	//m_oLog.Log("玩家[%s]离开桌子。", pIServerUserItem->GetUserData()->szAccounts);
 	m_pITableFrame->KillGameTimer(IDI_READY_START_GAME);
 	if (CheckStartGame() != INVALID_BYTE)
 	{
		//m_oLog.Log("游戏能开始");
 		m_pITableFrameControl->StartGame();
 	}
	else
	{
		//m_oLog.Log("游戏不能开始");
		m_pITableFrame->KillGameTimer(IDI_READY_START_GAME);
		//m_bStartCountDown = false;
		m_pITableFrame->SetGameStatus(GS_FREE);
		CMD_S_GameFree GameFree;
		ZeroMemory(&GameFree , sizeof(GameFree));
		GameFree.cbTimeLeave=-1;
		for(INT i=0 ; i<GAME_PLAYER ; i++)
		{
			if(i!=wChairID &&m_pITableFrame->GetServerUserItem(i) && !m_pITableFrame->GetServerUserItem(i)->IsAndroidUser())
			{
				m_pITableFrame->SendTableData(i, SUB_S_GAME_FREE, &GameFree, sizeof(GameFree));
			}
		}
	}
	return true;
}
Exemplo n.º 2
0
//定时器事件 
bool __cdecl CTableFrameSink::OnTimerMessage(WORD wTimerID, WPARAM wBindParam)
{
	switch(wTimerID)
	{
	case IDI_CLEAR_BUFFER_STATE:
		{
			m_bMeetConditions=false;
			return true;
		}
	case IDI_TIME_READCFG:
		{
			ReadIniCfg();
			return true;
		}
	case IDI_READY_START_GAME:
		{
			BYTE cbTime = CheckStartGame();
			if(cbTime != INVALID_BYTE)
			{
				m_pITableFrameControl->StartGame();
			}			
			return true;
		}
	case IDI_WRITESCORE:
		{
			if (m_pITableFrame->GetGameStatus() != GS_OX_ACCOUNTS) return true;
			WriteScore();
			m_pITableFrame->SendTableData(INVALID_CHAIR,SUB_S_GAME_FINISH,NULL, 0);
			return true;
		}
	case IDI_CONCLUDEGAME:
		{
			ConcludeGame();
			return true;
		}
	}
	if(wTimerID>=IDI_COUNTDOWN && (wTimerID<(IDI_COUNTDOWN+GAME_PLAYER)))
	{
		WORD wChairID = wTimerID-IDI_COUNTDOWN;
		IServerUserItem *pServerUserItem = m_pITableFrame->GetServerUserItem(wChairID);
		if(pServerUserItem == NULL) return true;
		switch(m_pITableFrame->GetGameStatus())
		{
		case GS_FREE:
			{
				m_pITableFrameManager->PerformStandUpAction(pServerUserItem);
				break;
			}
		case GS_OX_PLAY:
			{
				OnUserOpenCard(wChairID , 0);
				break;
			}

		}
		return true;
	}
	return false;
}
Exemplo n.º 3
0
void NET_SV_Run(void)
{
    net_addr_t *addr;
    net_packet_t *packet;
    int i;

    if (!server_initialized)
    {
        return;
    }

    while (NET_RecvPacket(server_context, &addr, &packet))
    {
        NET_SV_Packet(packet, addr);
        NET_FreePacket(packet);
        NET_ReleaseAddress(addr);
    }

    if (master_server != NULL)
    {
        UpdateMasterServer();
    }

    // "Run" any clients that may have things to do, independent of responses
    // to received packets

    for (i=0; i<MAXNETNODES; ++i)
    {
        if (clients[i].active)
        {
            NET_SV_RunClient(&clients[i]);
        }
    }

    switch (server_state)
    {
        case SERVER_WAITING_LAUNCH:
            break;

        case SERVER_WAITING_START:
            CheckStartGame();
            break;

        case SERVER_IN_GAME:
            NET_SV_AdvanceWindow();

            for (i = 0; i < NET_MAXPLAYERS; ++i)
            {
                if (sv_players[i] != NULL && ClientConnected(sv_players[i]))
                {
                    NET_SV_CheckResends(sv_players[i]);
                }
            }
            break;
    }
}
Exemplo n.º 4
0
static void NET_SV_ParseGameStart(net_packet_t *packet, net_client_t *client)
{
    net_gamesettings_t settings;

    NET_Log("server: processing game start packet");

    // Can only start a game if we are in the waiting start state.

    if (server_state != SERVER_WAITING_START)
    {
        NET_Log("server: error: not in waiting start state, server_state=%d",
                server_state);
        return;
    }

    if (client == NET_SV_Controller())
    {
        if (!NET_ReadSettings(packet, &settings))
        {
            // Malformed packet
            NET_Log("server: error: no settings from controller");
            return;
        }

        // Check the game settings are valid

        if (!NET_ValidGameSettings(sv_gamemode, sv_gamemission, &settings))
        {
            NET_Log("server: error: invalid game settings");
            return;
        }

        sv_settings = settings;
    }

    client->ready = true;

    CheckStartGame();

    // Update all ready clients with the current state (number of players
    // ready, etc.). This is used by games that show startup progress
    // (eg. Hexen's spinal loading)

    SendAllWaitingData();
}
Exemplo n.º 5
0
//游戏准备开始
void CTableFrameSink::GameReady( WORD wChair )
{
	m_pITableFrame->KillGameTimer(IDI_READY_START_GAME);
	BYTE cbLevelTime = CheckStartGame();
	if(cbLevelTime != INVALID_BYTE)
	{
		if(cbLevelTime == 0)
		{
			m_pITableFrameControl->StartGame();
		}
		else
		{
			CMD_S_GameReady GameReady;
			ZeroMemory(&GameReady , sizeof(GameReady));
			GameReady.cbTimeLeave=cbLevelTime;
			for(INT i=0; i<GAME_PLAYER; i++)
			{
				IServerUserItem *pIServerUserItem=m_pITableFrame->GetServerUserItem(i);
				if (pIServerUserItem!=NULL && !pIServerUserItem->IsAndroidUser())
				{
					m_pITableFrame->SendTableData(i, SUB_S_GAME_READY, &GameReady, sizeof(GameReady));
				}
			}
			m_pITableFrame->SetGameTimer(IDI_READY_START_GAME , cbLevelTime*1000 , 1 , 0);
		}
	}
	else
	{
		m_pITableFrame->KillGameTimer(IDI_READY_START_GAME);
		//m_bStartCountDown = false;
		m_pITableFrame->SetGameStatus(GS_FREE);
		CMD_S_GameFree GameFree;
		ZeroMemory(&GameFree , sizeof(GameFree));
		GameFree.cbTimeLeave=-1;
		for(INT i=0 ; i<GAME_PLAYER ; i++)
		{
			if(i!= wChair&&m_pITableFrame->GetServerUserItem(i) && !m_pITableFrame->GetServerUserItem(i)->IsAndroidUser())
			{
				m_pITableFrame->SendTableData(i, SUB_S_GAME_FREE, &GameFree, sizeof(GameFree));
			}
		}
	}
}