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(); }
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; }