Exemple #1
0
int UserDisposition(int incomeSd, int userID)
{
    printf("\n\nUser %s is getting a disposition!\n", users[userID].name);
    
    MessageType m;
    int result_val;
    if (userGame[userID] == -1)
        result_val = 0;
    else
        result_val = 1;
    
    m = composeMessage(result, sizeof(int), &result_val);
    sendMessage(incomeSd, &m);
    
    if (result_val)
    {
        m = composeMessage(disposition, sizeof(games[userGame[userID]].d), &(games[userGame[userID]].d));
        sendMessage(incomeSd, &m);
        
        printf("Disposition was sent\n");
        return 1;
    }
    else
        return 0;
}
Exemple #2
0
int UserTurn(MessageType *m, int incomeSd, int userID)
{
    printf("\n\nHandling the turn\n");
    fflush(stdout);
        
    int result_val;
    int gameID = userGame[userID];
    
    char turn_str[MAX_MES_LEN];
    char error[MAX_MES_LEN];
    strcpy(turn_str, (char *)m->data);
    
    if(userGame[userID] == -1)
    {
        result_val = 2;
        printf("The game of %s is over, he will be disconnected", users[userID].name);
        fflush(stdout);
        
        MessageType mes = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &mes);
        clearMessage(&mes);
    }
    else
    if (HandleTurn(turn_str, error, &games[gameID]))
    {
        result_val = 1;
        printf("Making turn\n");

        MakeTurn(turn_str, gameID);        
        
        printf("Color before: %d\n", games[gameID].current);
        games[gameID].current = (games[gameID].current + 1) % 2;        
        printf("Color after: %d\n", games[gameID].current);
        fflush(stdout);
        
        MessageType mes = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &mes);
        clearMessage(&mes);
        
    }
    else
    {
        result_val = 0;
        MessageType mes = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &mes);
        
        mes = composeMessage(text, sizeof(error), error);
        sendMessage(incomeSd, &mes);        
        clearMessage(&mes);
    }

    
    printf("Handling turn is finished\n");
    fflush(stdout);
    
    return 1;
}
Exemple #3
0
void FindOpponent(int incomeSd, int userID)
{
    int found = 0;
    int i;
    for (i = 0; i < MAXUSERS; i++)
        if (i != userID && users_available[i])
        {
            if (users[userID].ownLevel == users[i].desiredLevel && users[userID].desiredLevel == users[i].ownLevel)
            {
                found = 1;
                int gameID = CreateGame(userID, i);
                userGame[userID] = userGame[i] = gameID;
                userOp[userID] = i;
                userOp[i] = userID;
                
                printf("\n\nUserIDs: %d, %d\n", userID, i);
                printf("Game info\n");
                printf("\tGameID: %d\n", gameID);
                printf("\tWhiteID: %d\n", games[gameID].white_user.userID);
                printf("\tBlackID: %d\n", games[gameID].black_user.userID);
                break;
            }
        }
    
    if (!found)
    {
        int result_val = 0;
        MessageType m = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &m);
        
        while (userOp[userID] == userID)
            continue;
    }
    else
    {
        int result_val = 1;
        MessageType m = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &m);
        
    }
    
    MessageType m = composeMessage(text, sizeof(users[userOp[userID]].name), &(users[userOp[userID]].name));
    sendMessage(incomeSd, &m);
    
    Color color;
    if (games[userGame[userID]].white_user.userID == userID)
        color = white;
    else
        color = black;
    m = composeMessage(color_t, sizeof(Color), &color);
    sendMessage(incomeSd, &m);
    
    clearMessage(&m);    
}
Exemple #4
0
void* establishConnection(void* arg) 
{
    //Мы работаем с конкретным соединением
    int incomeSd = *((int*)arg);
            
    int userID = FindCell();

    MessageType *buf = (MessageType*) malloc (sizeof(MessageType));
    int resultOfHandlingMessage = 1;

    while (resultOfHandlingMessage) 
    {
        if (server_enabled)
        {
            getMessage(incomeSd, buf);
            resultOfHandlingMessage = HandleMessage(buf, incomeSd, userID);
        }
        else
        {
            char *str = "Server is turned off...";
            MessageType m = composeMessage(text, strlen(str), str);
            sendMessage(incomeSd, &m);
        }
    }   
    
    free(buf);
    return NULL;
}
Exemple #5
0
int UserLogout(int incomeSd, int userID)
{
    printf("\n\nUser [%d] is logging out!\n", userID);
    fflush(stdout);
    
    users_available[userID] = 0;
    pthread_mutex_lock(&usnum_mutex);
    numberOfPlayers--;
    pthread_mutex_unlock(&usnum_mutex);    
    
    if (userGame[userID] >= 0)
    {
        games_available[userGame[userID]] = 0;
        userGame[userID] = -1;
        userGame[userOp[userID]] = -1;
        userOp[userOp[userID]] = userOp[userID];
        userOp[userID] = userID;
    }
    
    printf("Userdata cleared...\n");
    fflush(stdout);
    
    char result_val = 'g';
   
    MessageType m = composeMessage(result, sizeof(char), &result_val);
    sendMessage(incomeSd, &m);
    clearMessage(&m);
    
    printf("User %s was successfully logged out\n", users[userID].name);
    fflush(stdout);
    
    return 0;
}
Exemple #6
0
void Parser::parse() {

    bool stop( false );
    while(!m_xml->atEnd() && !stop)
    {
        QXmlStreamReader::TokenType token = m_xml->readNext();
        if ( token == QXmlStreamReader::StartElement )
        {
            if( m_xml->name()=="MSG_Notification" )
            {
                MSG_Notification obj( *m_xml );
                if ( m_xml->name() != "MSG_Notification" )
                    m_xml->raiseError( "tag mismatch MSG_Notification" );
                else
                {
                    emit signalMSG_Notification( obj );
                    stop = true;
                }
            }
        }
    }

    if ( m_xml->hasError() )
    {
        switch ( m_xml->error() )
        {
        case QXmlStreamReader::CustomError:
            emit( signalValidationError( composeMessage( *m_xml ) ) );
            break;
        case QXmlStreamReader::PrematureEndOfDocumentError:
            emit( signalWarning( composeMessage( *m_xml ) ) );
            break;
        case QXmlStreamReader::NotWellFormedError:
        case QXmlStreamReader::UnexpectedElementError:
            emit( signalError( composeMessage( *m_xml ) ) );
            break;
        case QXmlStreamReader::NoError:
            break;
        }
    }
}
Exemple #7
0
int UserLogin(MessageType* m, int incomeSd, int userID)
{
    printf("\n\nNew user [%d] is logging in!\n", userID);
    fflush(stdout);
    
    UserData user_data = *(UserData*)(m->data);
    users[userID] = user_data; //ud никуда не денется, потому что в куче
    users[userID].userID = userID;
    
    PrintUserByID(userID);    
    
    if (!CanPlay())
    {
        printf("User %s will not be logged in\n", user_data.name);
        fflush(stdout);

        int result_val = 0;
        MessageType m = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &m);
        clearMessage(&m);
        
        return 0;
    }
    else
    {
        printf("User %s has successfully logged in!\n", user_data.name);
        fflush(stdout);
        
        int result_val = 1;
        MessageType m = composeMessage(result, sizeof(int), &result_val);
        sendMessage(incomeSd, &m);

        FindOpponent(incomeSd, userID);
        
        clearMessage(&m);
        
        return 1;
    }    
    
}
Exemple #8
0
int UserTryTurn(int incomeSd, int userID)
{
    printf("\n\nUser %s is trying to make a turn!\n", users[userID].name);
    fflush(stdout);
    
    int result_val;
    if (userGame[userID] == -1)
    {    
        printf("The game of %s is over, he will be disconnected", users[userID].name);
        fflush(stdout);
        result_val = 0;
    }
    else
    {
        int gameID = userGame[userID];
        Game game = games[gameID];
        
        printf("The id of the game is: %d\n", gameID);

        printf("UserID: %d\n", userID);
        printf("WhiteID: %d\n", game.white_user.userID);
        printf("BlackID: %d\n", game.black_user.userID);

        
        if (game.current == white)
            printf("Current turn is whites'\n");
        else
            printf("Current turn is blacks'\n");
        if ((game.current == white && game.white_user.userID != userID) || (game.current == black && game.black_user.userID != userID))
        {
            printf("Not time for turn!\n");
            result_val = 1;
        }
        else
            result_val = 2;
    }
    
    MessageType mes = composeMessage(result, sizeof(int), &result_val);
    sendMessage(incomeSd, &mes);
    
    if (result_val == 2)
    {
        getMessage(incomeSd, &mes);
        UserTurn(&mes, incomeSd, userID);
    }
    clearMessage(&mes);
    
    return 1;
}
Exemple #9
0
Vision::Results ImageAnalyzer::analyze(cv::Mat& img)
{
	findObjects(img);

	/* draw result on image (debug) */
	BlobInfo* ghost_result = ghost_buffer.lastValidBlob();
	if (ghost_result != NULL && ghost_result->getClass() == GHOST_CLASS)
	{
		cv::rectangle(img, ghost_result->a, ghost_result->b,
				CV_RGB(254,0,0), 2, 8, 0);
	}

	ghostwidth_filter.update(ghost_result != NULL ? ghost_result->getWidth() : 0);
	ghostheight_filter.update(ghost_result != NULL ? ghost_result->getHeight() : 0);
	distanceCalculator.insertGhostData((int)ghostheight_filter.curValue(),
			(int) ghostwidth_filter.curValue());

	return composeMessage();
}