Пример #1
0
void ShortestPathVertex::compute (MessageIterator<int>* msgs) {
    int mindist =  (superstep() == 0 && vertex_id() == 0) ? 0 : getValue();

    for (; !msgs->done(); msgs->next())
        mindist = min (mindist, msgs->getValue());

    if (mindist < getValue()) {
        *mutableValue() = mindist;
        EdgeIterator<int> iter = getOutEdgeIterator();
        for (; !iter.done(); iter.next())
            sendMessageTo(iter.dest()->getDest(), mindist + iter.dest()->getValue());
    }

    voteToHalt();
}
Пример #2
0
int input(void* peer)
{
    while(!done)
    {
        int read = 512;
        char buffer[read];
        char* tok;

        rewind(stdin);
        if(fgets(buffer, read, stdin))
        {
			buffer[strlen(buffer)-1] = 0;

			if(buffer[0] == '/')
            {
                tok = strtok(buffer+1, " ");

                if(!strcmp(tok, "quit"))
                {
                    done = 1;
                }
                else if(!strcmp(tok, "pm"))
                {
                    tok = strtok(NULL, " ");
                    char* msg = tok+strlen(tok)+1;
                    sendMessageTo((Peer*)peer, tok, msg, strlen(msg));
                }
                else
                    printf("Comando desconhecido.\n");
            }
            else
            {
                broadcastMessage((Peer*)peer, buffer, strlen(buffer));
                memset((void*) buffer, 0, read);
            }
        }
    }

    return 1;
}