virtual T process()
    {
        ObjectiveInterface::syncObjectives( connect_client );

        PowerUpInterface::syncPowerUps( connect_client );

        
        PlayerState * player = PlayerInterface::getPlayer(connect_client->getPlayerIndex());

        player->setStateSelectingFlag();

        PlayerFlagSync pfs;
        pfs.player_id = connect_client->player_id;
        ResourceManager::getFlag(connect_client->player_id)->frameToBuffer(pfs.player_flag, sizeof(pfs.player_flag));
        SERVER->broadcastMessage(&pfs, sizeof(pfs));

        PlayerStateSync player_state_update
            (player->getNetworkPlayerState());

        SERVER->broadcastMessage( &player_state_update, sizeof(PlayerStateSync));

        ConnectProcessStateMessage state_mesg;
        state_mesg.setMessageEnum(_connect_state_sync_complete);
        connect_client->sendMessage( &state_mesg,
                                     sizeof(ConnectProcessStateMessage));


        sendConnectionAlert( connect_client );
        if (GameControlRulesDaemon::getGameState() == _game_state_prepare_team)
        {
            GameControlCyclePrepareTeam prepare_team_mesg;
            SERVER->sendMessage(connect_client->player_id, &prepare_team_mesg, sizeof(GameControlCyclePrepareTeam));
        }
        return connect_state_idle;
    }
bool ServerConnectDaemon::connectStateUnitSync()
{
    ConnectProcessStateMessage state_mesg;
    int percent_complete = connect_unit_sync->getPercentComplete();

    // send a unit
    if(connect_unit_sync->sendNextUnit(connect_player_id)) {
        if ( sendunitpercent_timer.count() ) {
            state_mesg.setMessageEnum(_connect_state_message_sync_units_percent);
            state_mesg.setPercentComplete(percent_complete);
            SERVER->sendMessage(connect_player_id, &state_mesg,
                    sizeof(ConnectProcessStateMessage));
            sendunitpercent_timer.reset();
        }
        return true;
    }

    // Sending finished
    state_mesg.setMessageEnum(_connect_state_message_sync_units_percent);
    state_mesg.setPercentComplete(100);
    SERVER->sendMessage( connect_player_id, &state_mesg,
            sizeof(ConnectProcessStateMessage));

    UnitSyncIntegrityCheck unit_integrity_check_mesg;
    SERVER->sendMessage( connect_player_id, &unit_integrity_check_mesg,
            sizeof(UnitSyncIntegrityCheck));

    ObjectiveInterface::syncObjectives( connect_player_id );

    PowerUpInterface::syncPowerUps( connect_player_id );

    GameManager::spawnPlayer( connect_player_id );

    connect_player_state->setStatus( _player_state_active );

    PlayerStateSync player_state_update
        (connect_player_state->getNetworkPlayerState());

    SERVER->sendMessage( &player_state_update, sizeof(PlayerStateSync));

    state_mesg.setMessageEnum(_connect_state_sync_complete);
    SERVER->sendMessage( connect_player_id, &state_mesg,
            sizeof(ConnectProcessStateMessage));
    sendConnectionAlert( connect_player_id, _connect_alert_mesg_connect );

    connection_state = connect_state_idle;
    return true;
}
void ServerConnectDaemon::startClientDropProcess( PlayerID player_id )
{
    if ( disconnectClient( player_id ) == true ) {
        sendConnectionAlert( player_id, _connect_alert_mesg_client_drop );
    }
}
bool ServerConnectDaemon::connectStateUnitSync( void )
{
    ConnectProcessStateMessage state_mesg;
    int send_ret_val;
    int percent_complete;

    if ( UnitInterface::syncRemoteUnits( &send_ret_val, &percent_complete ) == false ) {
        if( send_ret_val != _network_ok ) {
            resetConnectFsm();
            return( true );
        }

        state_mesg.message_enum = _connect_state_message_sync_units_percent;
        state_mesg.percent_complete = percent_complete;
        send_ret_val = SERVER->sendMessage( connect_player_id, &state_mesg,
                                            sizeof(ConnectProcessStateMessage), 0 );

        if( send_ret_val != _network_ok ) {
            resetConnectFsm();
            return( true );
        }

        UnitSyncIntegrityCheck unit_integrity_check_mesg;
        send_ret_val = SERVER->sendMessage( connect_player_id, &unit_integrity_check_mesg, sizeof(UnitSyncIntegrityCheck), 0 );

        if( send_ret_val != _network_ok ) {
            resetConnectFsm();
            return( true );
        }


        ObjectiveInterface::syncObjectives( connect_player_id );

        PowerUpInterface::syncPowerUps( connect_player_id );

        GameManager::spawnPlayer( connect_player_id );

        connect_player_state->setStatus( _player_state_active );

        PlayerStateSync player_state_update;

        memmove( &player_state_update.player_state,
                 connect_player_state,
                 sizeof( PlayerState )
               );

        SERVER->sendMessage( &player_state_update, sizeof(PlayerStateSync), 0 );

        state_mesg.message_enum = _connect_state_sync_complete;
        send_ret_val = SERVER->sendMessage( connect_player_id, &state_mesg, sizeof(ConnectProcessStateMessage), 0 );

        if( send_ret_val != _network_ok ) {
            resetConnectFsm();
            return( true );
        }


        sendConnectionAlert( connect_player_id, _connect_alert_mesg_connect );

        connection_state = _connect_state_idle;
        return( true );
    } else
        if ( percent_complete > 0 ) {
            state_mesg.message_enum = _connect_state_message_sync_units_percent;
            state_mesg.percent_complete = percent_complete;
            send_ret_val = SERVER->sendMessage( connect_player_id, &state_mesg,
                                                sizeof(ConnectProcessStateMessage), 0);

            if( send_ret_val != _network_ok ) {
                resetConnectFsm();
                return( true );
            }

        }

    return( true );
}
bool ServerConnectDaemon::connectStateUnitSync()
{
    ConnectProcessStateMessage state_mesg;
    int percent_complete = connect_unit_sync->getPercentComplete();

    // send a unit
    if(connect_unit_sync->sendNextUnit(connect_player_id)) {
        state_mesg.message_enum = _connect_state_message_sync_units_percent;
        state_mesg.percent_complete = percent_complete;
        int ret = SERVER->sendMessage(connect_player_id, &state_mesg,
                sizeof(ConnectProcessStateMessage), 0);
        
        if(ret != _network_ok ) {
            resetConnectFsm();
        }

        return true;
    }

    // Sending finished
    state_mesg.message_enum = _connect_state_message_sync_units_percent;
    state_mesg.percent_complete = percent_complete;
    int ret = SERVER->sendMessage( connect_player_id, &state_mesg,
            sizeof(ConnectProcessStateMessage), 0 );

    if(ret != _network_ok) {
        resetConnectFsm();
        return true;
    }

    UnitSyncIntegrityCheck unit_integrity_check_mesg;
    ret = SERVER->sendMessage( connect_player_id, &unit_integrity_check_mesg, sizeof(UnitSyncIntegrityCheck), 0 );
    
    if(ret != _network_ok ) {
        resetConnectFsm();
        return true;
    }

    ObjectiveInterface::syncObjectives( connect_player_id );

    PowerUpInterface::syncPowerUps( connect_player_id );

    GameManager::spawnPlayer( connect_player_id );

    connect_player_state->setStatus( _player_state_active );

    PlayerStateSync player_state_update
        (connect_player_state->getNetworkPlayerState());

    SERVER->sendMessage( &player_state_update, sizeof(PlayerStateSync), 0 );

    state_mesg.message_enum = _connect_state_sync_complete;
    ret = SERVER->sendMessage( connect_player_id, &state_mesg, sizeof(ConnectProcessStateMessage), 0 );

    if(ret != _network_ok ) {
        resetConnectFsm();
        return true;
    }

    sendConnectionAlert( connect_player_id, _connect_alert_mesg_connect );

    connection_state = _connect_state_idle;
    return true;
}