Beispiel #1
0
/*
 * Basic broadcast. The broadcast takes N turns, all sends are done by the
 * same node (one at each turn).
 * Note that like every functions defined here, they have the type NodesFct.
 */
void BasicBroadcast(int id, Message m){
    char* event;
    Message msgOut;
    int i;

    //Events Rules
    while((event = getNextExternalEvent(id)) != NULL){
        printf("event received %d %s\n", id, event); 
        //Read the first event
        if(!strcmp(event, "broadcast")){
            //start a basic broadcast:
            //send hello to every nodes
            for(i = 0; i < getNbNodes(); i++){
                msgOut = initMessage("Hello\0", id, id, i);
                if(i != id){
                    Send(msgOut);
                } else {
                    deliver(msgOut,id);
                    deleteMessage(msgOut);
                }
            }
        }
        free(event);
    }

    //Message Rules
    if(NULL != m){
        deliver(m,id);
        deleteMessage(m);
    }
}
Beispiel #2
0
int pull_game(pPlayer player,int second_of_player,void* data)
{
	if (player->game->local)
		return 0;
	if (player->kicked)
		return 2; //kicked;
	pMessage message = NULL;
	numToMessage(&message,"game_id",player->game->id);
	numToMessage(&message,"player_id",player->id);
	numToMessage(&message,"second_of_player",second_of_player);
	pMessage result = sendMessage(message,"data",data,-1536,"pull_game.php",hase_url);
	deleteMessage(&message);
	if (result)
	{
		int kicked = 0;
		if (result->name[0] == 'K')
		{
			kicked = 2;
			printf("player %s kicked or not available\n",player->name);
			player->kicked = 1;
		}
		deleteMessage(&result);
		return kicked; //0 Okay, 2 Kicked
	}
	return 1;//Error
}
Beispiel #3
0
int push_game(pPlayer player,int second_of_player,void* data)
{
	if (player->game->local)
		return 0;
	pMessage message = NULL;
	numToMessage(&message,"game_id",player->game->id);
	numToMessage(&message,"player_id",player->id);
	numToMessage(&message,"player_pw",player->pw);
	numToMessage(&message,"second_of_player",second_of_player);
	#ifdef INPUT_COMPRESSION
	if (hase_gzip)
		numToMessage(&message,"gzip",1);
	#endif
	pMessage result = sendMessage(message,"data",data,1536,"push_game.php",hase_url);
	deleteMessage(&message);
	if (result)
	{
		int r = 0;
		if (atoi(result->content) == 1) //kicked!
			r = 2;
		deleteMessage(&result);
		return r;
	}
	return 1; //Error!
}
Beispiel #4
0
void kick(pPlayer player)
{
	player->game->sprite_count[player->nr-1]--;
	if (player->game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",player->game->id);
		numToMessage(&message,"player_id",player->id);
		numToMessage(&message,"admin_pw",player->game->admin_pw);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"kick.php",hase_url);
		deleteMessage(&message);
		deleteMessage(&result);
	}
	if (player->input_thread)
		end_pull_thread(player);
	while (player->input_data)
	{
		pThreadData next = player->input_data->next;
		free(player->input_data);
		player->input_data = next;
	}
}
Beispiel #5
0
void change_game(pGame game,Uint32 options,int seconds_per_turn,int hares_per_player)
{
	if (game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",game->id);
		numToMessage(&message,"admin_pw",game->admin_pw);
		numToMessage(&message,"options",options);
		numToMessage(&message,"seconds_per_turn",seconds_per_turn);
		numToMessage(&message,"hares_per_player",hares_per_player);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"change_game.php",hase_url);
		deleteMessage(&message);
		if (result)
		{
			game->options.compressed = options;
			game->seconds_per_turn = seconds_per_turn;
			game->hares_per_player = hares_per_player;
		}
		deleteMessage(&result);
	}
	else
	{
		game->options.compressed = options;
		game->seconds_per_turn = seconds_per_turn;
		game->hares_per_player = hares_per_player;
	}
}
void recibirSolicitarPaginas(int cpu_socket, int pidActivo){
	char* bytesAEnviar;
	int32_t nroPagina;
	int32_t offset;
	int32_t tamanio;

	message* nroPaginaMessage = receiveMessage(cpu_socket);
	nroPagina = convertToInt32(nroPaginaMessage->contenido);

	message* offsetMessage = receiveMessage(cpu_socket);
	offset = convertToInt32(offsetMessage->contenido);

	message* tamanioMessage = receiveMessage(cpu_socket);
	tamanio = convertToInt32(tamanioMessage->contenido);


	deleteMessage(nroPaginaMessage);
	deleteMessage(offsetMessage);
	deleteMessage(tamanioMessage);

	log_trace(logger, "Pedido recibir paginas [pid: %d, nroPagina %d, offset %d, tamanio %d]", pidActivo, nroPagina, offset, tamanio);

	//Esto es solo una validacion
	tabla_de_paginas* tablaDePaginas = buscarPorPID(pidActivo);
	if(tablaDePaginas==NULL){
		enviarFAIL(cpu_socket, PID_NO_EXISTE);
		return;
	}

	if(TLBEnable){
		//Buscar en TLB. Si esta, ir a buscar a memoria y enviar bytes
		int frame = buscarEnTLB(nroPagina, pidActivo);
		if(frame!=-1){
			bytesAEnviar = obtenerBytesDeMemoriaPrincipal(frame, offset, tamanio);
			enviarOKConContenido(cpu_socket, tamanio, bytesAEnviar);
			return;
		}
	}
	//TLB Miss

	demorarSolicitud();
	umcResult result = getPageEntry(tablaDePaginas, nroPagina);
	if(!result.ok){
		enviarFAIL(cpu_socket, result.codError);
		return;
	}

	//Actualizar TLB
	if(TLBEnable) actualizarTLB(nroPagina, pidActivo, result.frameEntry->nroFrame);

	demorarSolicitud();

	enviarOKConContenido(cpu_socket, tamanio, result.frameEntry->direccion_real + offset);
}
Beispiel #7
0
pGame create_game(char* game_name,Uint32 options,int seconds_per_turn,char* level_string,int local,int hares_per_player)
{
	pMessage result = NULL;
	if (local == 0)
	{
		pMessage message = NULL;
		addToMessage(&message,"game_name",game_name);
		numToMessage(&message,"options",options);
		numToMessage(&message,"seconds_per_turn",seconds_per_turn);
		numToMessage(&message,"hares_per_player",hares_per_player);
		addToMessage(&message,"level_string",level_string);
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"create_game.php",hase_url);
		deleteMessage(&message);
		if (result == NULL)
			return NULL;
	}
	pGame game = (pGame)malloc(sizeof(tGame));
	game->id = -1;
	sprintf(game->name,"%s",game_name);
	sprintf(game->level_string,"%s",level_string);
	game->options.compressed = options;
	game->player_count = 0;
	game->create_date = 0;
	game->seconds_per_turn = seconds_per_turn;
	game->hares_per_player = hares_per_player;
	game->status = 0;
	game->local = local;
	if (local)
		game->admin_pw = 12345;
	else
		game->admin_pw = 0;
	game->local_player = NULL;
	game->local_counter = 0;
	game->next = NULL;
	memset(game->sprite_count,0,sizeof(int)*SPRITE_COUNT);
	pMessage now = result;
	while (now)
	{
		if (strcmp(now->name,"game_id") == 0)
			game->id = atoi(now->content);
		if (strcmp(now->name,"admin_pw") == 0)
			game->admin_pw = atoi(now->content);
		if (strcmp(now->name,"create_date") == 0)
			game->create_date = atoi(now->content);
		now = now->next;
	}
	deleteMessage(&result);
	return game;
}
Beispiel #8
0
int server_info()
{
	pMessage result = sendMessage(NULL,NULL,NULL,0,"",gop_server());
	if (result == NULL)
		return -1;
	pMessage mom = result;
	while (mom)
	{
		if (strcmp(mom->name,"gzip") == 0 && strcmp(mom->content,"yes") == 0)
			hase_gzip = 1;
		else
		if (strcmp(mom->name,"irc_server") == 0)
			sprintf(irc_server,"%s",mom->content);
		else
		if (strcmp(mom->name,"irc_channel") == 0)
			sprintf(irc_channel,"%s",mom->content);
		else
		if (strcmp(mom->name,"irc_port") == 0)
		{
			char* content = mom->content;
			for (irc_port_count = 0; irc_port_count < HASE_MAX_IRC_PORT; irc_port_count++)
			{
				irc_port[irc_port_count] = strtol (content, &content, 10);
				if (content[0] != ',')
				{
					irc_port_count++;
					break;
				}
				else
					content++;
			}
		}
		else
		if (strcmp(mom->name,"version") == 0)
		{
			int version = atoi(mom->content);
			if (version == CLIENT_VERSION)
			{
				sprintf(hase_url,"%s",mom->next->content);
				printf("Using server %s with Version %i\n",hase_url,version);
				deleteMessage(&result);
				return version;
			}
		}
		mom = mom->next;
	}
	deleteMessage(&result);
	return 0;
}
Beispiel #9
0
int get_games(pGame *gameList)
{
	pMessage result = NULL;
	int i;
	for (i = 0; i < 3 && result == NULL;i++)
		result = sendMessage(NULL,NULL,NULL,0,"get_games.php",hase_url);
	if (result == NULL)
		return 0;
	pMessage now = result;
	*gameList = NULL;
	pGame game = NULL;
	int game_count = 0;
	while (now)
	{
		if (strcmp(now->name,"game_count") == 0)
			game_count = atoi(now->content);
		if (strcmp(now->name,"game_id") == 0)
		{
			if (game)
			{
				game->next = (pGame)malloc(sizeof(tGame));
				game = game->next;
			}
			else
			{
				*gameList = (pGame)malloc(sizeof(tGame));
				game = *gameList;
			}
			game->id = atoi(now->content);
			game->name[0] = 0;
			game->level_string[0] = 0;
			game->options.compressed = 0;
			game->player_count = 0;
			game->create_date = 0;
			game->seconds_per_turn = 0;
			game->status = 0;
			game->admin_pw = 0;
			game->next = NULL;
			game->local = 0;
			memset(game->sprite_count,0,sizeof(int)*SPRITE_COUNT);
		}
		if (strcmp(now->name,"game_name") == 0)
			sprintf(game->name,"%s",now->content);
		if (strcmp(now->name,"options") == 0)
			game->options.compressed = atoi(now->content);
		if (strcmp(now->name,"player_count") == 0)
			game->player_count = atoi(now->content);
		if (strcmp(now->name,"create_date") == 0)
			game->create_date = atoi(now->content);
		if (strcmp(now->name,"seconds_per_turn") == 0)
			game->seconds_per_turn = atoi(now->content);
		if (strcmp(now->name,"hares_per_player") == 0)
			game->hares_per_player = atoi(now->content);
		if (strcmp(now->name,"status") == 0)
			game->status = atoi(now->content);
		now = now->next;
	}
	deleteMessage(&result);
	return game_count;
}
Beispiel #10
0
void MessagePanel::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    if(gMessage==NULL){
        this->hide();
        return;
    }

    painter->setPen(QColor(0,255,0,alpha));
    painter->setBrush(QBrush(QColor(0,255,0,alpha)));

    QPixmap pixmap(":/res/divinecraft/textures/blocks/planks_spruce.png");

    //    painter->drawRect(rect);
    painter->drawPixmap(rect,pixmap,QRectF(0,0,pixmap.width(),pixmap.height()));
    painter->setPen(QColor(gMessage->textColor.red()
                           ,gMessage->textColor.green(),gMessage->textColor.blue(),alpha));

    painter->setFont(font);
    QRectF texRect(rect.x()+rect.width()*0.05,rect.y()+rect.height()*0.05,rect.width()*0.9,rect.height()*0.9);
    painter->drawText(texRect,Qt::AlignCenter ,gMessage->text);

    if(beginTime.secsTo(QTime::currentTime())>=gMessage->showTime){
        if(alpha>0){                    //消失动画
            alpha-=5;
            if(alpha<0)
                alpha=0;
        }
        else{
            this->hide();
            deleteMessage();
        }
    }
}
Beispiel #11
0
/*
 * Pipeline broadcast. This protocol takes 1 turn to broadcast, the node
 * performing the broadcast sends the message to the next note, which in turn
 * transmits the message to its neighbour and so on.
 * Note that like every functions defined here, they have the type NodesFct.
 */
void PipelineBroadcast(int id, Message m){
    char* event;
    Message msg, fwd;
    int neighbor;

    // Event Rules
    while((event = getNextExternalEvent(id)) != NULL){
        printf("event received %i %s\n",id, event); 
        // Read the first event
        if(0 == strcmp(event, "broadcast")){
            neighbor = (id + 1) % getNbNodes();
            msg = initMessage("Hello\0", id, id, neighbor);
            Send(msg);
            deliver(msg,id);
        }
        free(event);
    }

    // Message Rules
    if(NULL != m){
        deliver(m, id);

        // Forward the message if need be
        neighbor = (id + 1) % getNbNodes();
        if(neighbor != m->origin){
            fwd = initMessage(m->msg, m->origin, id, neighbor);
            Send(fwd);
        }

        // Free the local message
        deleteMessage(m);
    }
}
Beispiel #12
0
int GM862::executeCommand(String command){
    //  Serial.println("command: '" + command + "'\nlength: " + command.length());
	// parse command and execute
	int state = -1;
    if(command.equalsIgnoreCase("reboot")){
	  switchOff();
	  delay(8000);
	  switchOn();
	  delay(16000);
	  init();
	  state = 97;
	} else if(command.equalsIgnoreCase("delete messages")){
	  deleteMessage("0");
	  state = 96;
	} else if(command.equalsIgnoreCase("help")){
	  state = 95;
	}
	for(int i=0;i<=numOfCommands;i++){
//	   Serial.println("'" + command + "' ?? '" + commands[i] + "'");
	   if(command.equalsIgnoreCase(commands[i])){
	       state = i;
	       break;
	   }
	}
    return state;
}
void MessageHandler::deleteAllMessagesTo(MessageListener* listener){
	for(int i = 0;i < m_Messages->size();i++){
		if((*m_Messages)[i]->reciever == listener){
			deleteMessage((*m_Messages)[i]);
		}
	}
}
void MessageHandler::update(){
	for(int i = 0;i < m_MessagesToDelete->size();i++){
		for(int j = 0;j < m_Messages->size();j++){
			if((*m_Messages)[j] == (*m_MessagesToDelete)[i]){
				SafePtrRelease((*m_Messages)[j]);
				m_Messages->erase(m_Messages->begin()+j);
				break;
			}
		}
	}
	m_MessagesToDelete->clear();
	bool pass = false;
	for(int i = 0;i < m_Messages->size();i++){
		(*m_Messages)[i]->timeToSend -= Util::instance()->getDelta()*100;
		for(int j = 0;j < m_MessagesToDelete->size();j++){//we don't want to send any messages that are in m_MessagesToDelete
			if((*m_Messages)[i] == (*m_MessagesToDelete)[j]){
				pass = true;
				break;
			}
		}
		if(!pass){
			if((*m_Messages)[i]->timeToSend <= 0){
				sendMessage((*m_Messages)[i]);
				deleteMessage((*m_Messages)[i]);
			}
		}
	}
}
PAPIMessage * sendRequest( PAPIConnection *	inConnection,
						   PAPIMessage *	inRequestMessage,
						   PAPIStatus *		outStatus )
{
	int				theContentLength;
	char 			theContentLengthString[ MAX_CONTENT_LENGTH_SIZE ];
	char *			theRequest;
	PAPIMessage *	theResponse = 0;

	*outStatus =	PAPISuccess;

	if ( inConnection == 0 || inConnection->mFD == INVALID_SOCKET )
	{
		*outStatus = PAPIConnectionFailure;
		return 0;
	}
	
	theRequest = messageToString( inRequestMessage );
	if ( theRequest != 0 && ( theContentLength = strlen( theRequest ) ) > 0 )
	{
		char *	theBuf;
		int		theSize;
		snprintf( theContentLengthString,
				  MAX_CONTENT_LENGTH_SIZE,
			      "%s%d\r\n",
			      CONTENTLENGTH, 
			      theContentLength );

		deleteMessage( inConnection->mSavedMessage );
		inConnection->mSavedMessage = 0;
		theSize = strlen( theContentLengthString ) + theContentLength + 1;
		theBuf = ( char * )malloc( theSize );
		if ( theBuf == 0 )
		{
			*outStatus = PAPIOutOfMemoryFailure;
			free( ( void * )theRequest );
			return 0;
		}
		snprintf( theBuf, theSize, "%s%s", theContentLengthString, theRequest );
		if ( send( inConnection->mFD,
		  	   	( void * )theBuf,
		  	   	theSize - 1,
		  	   	0 ) == SOCKET_ERROR )
		{
			*outStatus = PAPIConnectionFailure;
			free( ( void * )theBuf );
			free( ( void * )theRequest );
			return 0;
		}
		free( ( void * )theBuf );
		free( ( void * )theRequest );
		theResponse = getResponse( inConnection, outStatus );
	}
	else
	{
		free( ( void * )theRequest );
	}
	return theResponse;
}
void MessageHandler::deleteMessage(const std::string& name){
	std::vector<Message*> msgs = *m_Messages;
	for(int i = 0;i < msgs.size();i++){
		if(msgs[i]->name == name){
			deleteMessage(msgs[i]);
		}
	}
}
Beispiel #17
0
/*
 * Total Order Broadcast with good throughput.
 * Note that like every functions defined here, they have the type NodesFct.
 */
void TOBThroughputRodBroadcast(int id, Message m){
    char* event;
    Message msgOut;

    //Events Rules
    while((event = getNextExternalEvent(id)) != NULL){
        printf("Event received %d %s\n", id, event); 
        //Read the first event
        if(!strcmp(event, "broadcast")){
            if(0 == id){
                // The broadcast is your own, deliver
                msgOut = initMessage("Hello\0", id, id, id);
                deliver(msgOut, id);
                deleteMessage(msgOut);
                // Pass the message to your successor

                if(1 != getNbNodes()){
                    msgOut = initMessage("Hello\0", 0, 0, 1);
                    Send(msgOut);
                }
            } else {
                // Send the message to process 0
                msgOut = initMessage("Hello\0", id, id, 0);
                Send(msgOut);
            }
        }
        free(event);
    }

    // Message Rules
    if(NULL != m){
        if(0 == id)
            printf("0 receives a message to relay from %i\n", m->sender);

        deliver(m, id);

        // If not the last of the pipeline...
	if(id != getNbNodes() - 1){
            // Transfer the message to you successor
            msgOut = initMessage(m->msg, m->origin, id, id + 1 % getNbNodes());
            Send(msgOut);
	}

        deleteMessage(m);
    }
}
Beispiel #18
0
/*
 * Tree broadcast. This protocol needs log(NbNodes) turn to broadcast.
 * Every node sends to its succesors.
 * Note that like every functions defined here, they have the type NodesFct.
 */
void TreeBroadcast(int id, Message m){
    char* event;
    Message msgOut;
    int nTurn;

    //Events Rules
    while((event = getNextExternalEvent(id)) != NULL){
        printf("Event received %d %s\n", id, event); 
        //Read the first event
        if(!strcmp(event, "broadcast")){
            //start a tree broadcast:
            //Iniatialize the message
            for(nTurn = 0; nTurn < log2(getNbNodes()); nTurn++){
                //at the first step of the tree broadcast, we send a message
                //to our successor
                msgOut = initMessage("Hello\0", id, id, (int)(pow(2,nTurn)+id)%getNbNodes());
                Send(msgOut);
            }
            // Deliver the message localy
            msgOut = initMessage("Hello\0", id, id, id);
            deliver(msgOut,id);
            deleteMessage(msgOut);
        }
        free(event);
    }

    //Message Rules
    if(NULL != m){
        deliver(m,id);
        //at a step n, a message is sent at a distance 2^n
        //the distance is not exactly the difference between the sender and the
        //receiver id because of the mod N
        if(m->sender < m->receiv)
            nTurn=log2(m->receiv-m->sender);
        else
            nTurn=log2(getNbNodes()-m->sender+m->receiv);
        //this turn is done, let's do the others
        //now we can send all the others messages
        for(nTurn++; nTurn<log2(getNbNodes()); nTurn++){
            msgOut = initMessage(m->msg, m->origin, id, ((int)(pow(2,nTurn)+id))%getNbNodes());
            Send(msgOut);
        }
        deleteMessage(m);
    }
}
Beispiel #19
0
void set_status(pGame game,int status)
{
	int old_status = game->status;
	game->status = status;
	if (game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",game->id);
		numToMessage(&message,"admin_pw",game->admin_pw);
		numToMessage(&message,"status",game->status);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"set_status.php",hase_url);
		deleteMessage(&message);
		deleteMessage(&result);
	}
	else
	if (status == 1 && old_status != 1)
	{
		int positions[game->player_count];
		int i;
		for (i=0;i<game->player_count;i++)
			positions[i] = i;
		//Shuffle
		for (i=0;i<game->player_count*10;i++)
		{
			int a = spRand()%game->player_count;
			int b = spRand()%game->player_count;
			if (a == b)
				continue;
			int temp = positions[a];
			positions[a] = positions[b];
			positions[b] = temp;
		}
		i = 0;
		pPlayer p = game->local_player;
		while (p)
		{
			p->position_in_game = positions[i];
			p = p->next;
			i++;
		}
	}
}
Beispiel #20
0
void leave_game(pPlayer player)
{
	player->game->sprite_count[player->nr-1]--;
	if (player->game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",player->game->id);
		numToMessage(&message,"player_id",player->id);
		numToMessage(&message,"player_pw",player->pw);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"leave_game.php",hase_url);
		deleteMessage(&message);
		deleteMessage(&result);
	}
	else
	{
		pPlayer last_player = NULL;
		pPlayer mom_player = player->game->local_player;
		while (mom_player)
		{
			if (mom_player->id == player->id)
			{
				if (last_player)
					last_player->next = mom_player->next;
				else
					player->game->local_player = mom_player->next;
				free(mom_player);
				break;
			}
			last_player = mom_player;
			mom_player = mom_player->next;
		}
	}
	if (player->input_thread)
		end_pull_thread(player);
	while (player->input_data)
	{
		pThreadData next = player->input_data->next;
		free(player->input_data);
		player->input_data = next;
	}
	free(player);
}
Beispiel #21
0
void delete_game(pGame game)
{
	if (game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",game->id);
		numToMessage(&message,"admin_pw",game->admin_pw);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"delete_game.php",hase_url);
		deleteMessage(&message);
		deleteMessage(&result);
	}
	else
		delete_player_list(game->local_player);
	delete_game_list(game);
}
Beispiel #22
0
/*
 * Total Order Broadcast with good latency.
 * Note that like every functions defined here, they have the type NodesFct.
 */
void TOBLatencyBroadcast(int id, Message m){
    char* event;
    Message msgOut;
    int i;

    //Events Rules
    while((event = getNextExternalEvent(id)) != NULL){
        printf("Event received %d %s\n", id, event); 
        //Read the first event
        if(!strcmp(event, "broadcast")){
            if(0 == id){
                // The broadcast is your own, deliver
                msgOut = initMessage("Hello\0", id, id, id);
                deliver(msgOut, id);
                deleteMessage(msgOut);
                // Pass the message to your childs
                for(i = 1; i < getNbNodes(); i *= 2){
                    msgOut = initMessage("Hello\0", id, id, i);
                    Send(msgOut);
                }
            } else {
                // Send the message to process 0
                msgOut = initMessage("Hello\0", id, id, 0);
                Send(msgOut);
            }
        }
        free(event);
    }

    // Message Rules
    if(NULL != m){
        if(0 == id)
            printf("0 receives a message to relay from %i\n", m->sender);

        deliver(m, id);

        for(i = 2 * id + 1; i < getNbNodes(); i *= 2){
            msgOut = initMessage(m->msg, m->origin, id, i);
            Send(msgOut);
        }

        deleteMessage(m);
    }
}
Beispiel #23
0
uint8_t SIMCOM::getGeo(geoSmsData *retSms, char *pwd)
{
	static uint8_t l = 1;
	retSms->smsDataValid = false;
	retSms->smsCmdNum = 0xFF;
	retSms->smsPending = checkForMessages();
	if(!retSms->smsPending)
	{
		l = 1;
		return 0;//no messages
	}
	if(retSms->smsPending == 0xFF)
	{
		retSms->smsPending = 0x00;
		return 1; //there was an error
	} 
	while(retSms->smsPending && (l <= SIMSIZE))
	{
		if(readMessageBreakOut(l) == 0xFF)
		{
			l++;
			continue;
		}
		confirmAtCommand("\"",100);
		atRxBuffer[strlen(atRxBuffer) - 1] = '\0';
		strcpy(retSms->smsNumber,atRxBuffer);
		confirmAtCommand("\r\n",100);
/*		if(!strstr(retSms->smsNumber,"+") != NULL)
		{
//			confirmAtCommand("/",500);
			confirmAtCommand("/",500);
		}*/
		confirmAtCommand(DELIMITER,100);
		atRxBuffer[strlen(atRxBuffer) - 1] = '\0';
		if(strncmp((atRxBuffer + (strlen(atRxBuffer)-4)),pwd,4) != 0) 
			retSms->smsNumber[0] = '\0';
		else
		{
			retSms->smsDataValid = true;
			confirmAtCommand(DELIMITER,100);
			atRxBuffer[strlen(atRxBuffer) - 1] = '\0';
			retSms->smsCmdNum = atoi(atRxBuffer);
			confirmAtCommand("\r\n",100);
			strcpy(retSms->smsCmdString,atRxBuffer);
		}
		deleteMessage(l);
		retSms->smsPending--;
		l++;
		if(!retSms->smsPending)
			l = 1;
		return 0;  //message read
	}
	deleteAllMessages(); // too many messages on SIM card
	return 2;
}
Beispiel #24
0
void heartbeat(pPlayer player)
{
	pMessage message = NULL;
	numToMessage(&message,"game_id",player->game->id);
	numToMessage(&message,"player_id",player->id);
	pMessage result = NULL;
	int i;
	for (i = 0; i < 3 && result == NULL;i++)
		result = sendMessage(message,NULL,NULL,0,"heartbeat.php",hase_url);
	deleteMessage(&result);
}
Beispiel #25
0
void set_level(pGame game,char* level_string)
{
	if (game->local == 0)
	{
		pMessage message = NULL;
		numToMessage(&message,"game_id",game->id);
		numToMessage(&message,"admin_pw",game->admin_pw);
		addToMessage(&message,"level_string",level_string);
		pMessage result = NULL;
		int i;
		for (i = 0; i < 3 && result == NULL;i++)
			result = sendMessage(message,NULL,NULL,0,"set_level.php",hase_url);
		deleteMessage(&message);
		if (result)
			sprintf(game->level_string,"%s",level_string);
		deleteMessage(&result);
	}
	else
		sprintf(game->level_string,"%s",level_string);
}
Beispiel #26
0
DWORD WINAPI MailHandler::clientHandler(LPVOID param){
	SOCKET client_socket = (SOCKET)param;
	if (client_socket == INVALID_SOCKET) {
		printf("error with accept socket. GetLasterror= %d\n", GetLastError());
		return 1003;
	}
	char buf[SIZE_OF_BUF] = "/0";
	//пересылаем код ответа номер 2 (ready) через клиентский сокет
	//POP3-коды ответа отпределены в Responses.h как двумерный массив
	sendLine(client_socket, responses[2]);
	//значение устанавливается в answer(), по смыслу номер состояния после принятия запроса
	int status = 1;
	int aut;
	User curUs = User();
	do {
		aut = authentication(client_socket, status, curUs); //процесс аутентификации клиента
		if (status == 0) {
			break;//Проверка на выход
		}
	} while (aut < 0);
	while (recvLine(client_socket, buf, SIZE_OF_BUF)>0){
		//принимаем сообщения размером buf из клиентского сокета, записываем в buf
		//int len = recvLine(client_socket, buf, SIZE_OF_BUF);
		//if (len > 2){
			//если что-то пришло, отвечаем
			string request=string(buf);
			request.erase(request.size() - 1);
			if (request.find("STAT") != string::npos){
				MailHandler::status(client_socket, curUs);
			}
			else if (request.find("LIST") != string::npos){
				getList(client_socket, request, curUs);
			}
			else if (request.find("RETR") != string::npos){
				getMessage(client_socket, request, curUs);
			}
			else if (request.find("DELE") != string::npos){
				deleteMessage(client_socket, request, curUs);
			}
			else if (request.find("RSET") != string::npos){
				reset(client_socket, curUs);
			}
			else if (request.find("QUIT") != string::npos){
				disconnect(client_socket, status, curUs);
			}
		//}
		if (status == 0) {
			break;//Проверка на выход
		}
	}
	closesocket(client_socket);
}
Beispiel #27
0
KornSubjectsDlg::KornSubjectsDlg(QWidget *parent)
    : KDialogBase(parent, "urldialog", true, "test", Close, Close, true), _mailDrop(new QPtrList< KMailDrop >),
      _subjects(0), _delete(0), mailDlg(0), _canDeleteMaildrop(true)
{
    _loadSubjectsCanceled = false;
    setModal(true);

    // The dialog contains a list view and several buttons.
    // Two box layouts hol dthem.
    QWidget *page = new QWidget(this);
    setMainWidget(page);
    invertSelButton = new KPushButton(i18n("&Invert Selection"), page);
    clearSelButton = new KPushButton(i18n("&Remove Selection"), page);
    deleteButton = new KPushButton(i18n("&Delete"), page);
    showButton = new KPushButton(i18n("&Show"), page);
    deleteButton->setEnabled(false);
    showButton->setEnabled(false);
    QVBoxLayout *topLayout = new QVBoxLayout(page, 0, spacingHint());
    QHBoxLayout *buttons = new QHBoxLayout();
    _list = new KListView(page);
    topLayout->addWidget(_list, 10);
    topLayout->addLayout(buttons, 0);
    buttons->addWidget(invertSelButton, 0);
    buttons->addWidget(clearSelButton, 0);
    buttons->addWidget(deleteButton, 0);
    buttons->addWidget(showButton, 0);
    buttons->addStretch(10);

    // feed the list view with its colums
    _list->setSelectionMode(QListView::Multi);
    _list->addColumn(i18n("From"));
    _list->addColumn(i18n("Subject"));
    _list->addColumn(i18n("Date"));
    _list->addColumn(i18n("Size (Bytes)"));

    // column 3 contains a number (change alignment)
    _list->setColumnAlignment(3, Qt::AlignRight);
    _list->setItemMargin(3);

    // connect the selection changed and double click events of the list view
    connect(_list, SIGNAL(selectionChanged()), this, SLOT(listSelectionChanged()));
    connect(_list, SIGNAL(executed(QListViewItem *)), this, SLOT(doubleClicked(QListViewItem *)));

    // connect the buttons
    connect(invertSelButton, SIGNAL(clicked()), this, SLOT(invertSelection()));
    connect(clearSelButton, SIGNAL(clicked()), this, SLOT(removeSelection()));
    connect(showButton, SIGNAL(clicked()), this, SLOT(showMessage()));
    connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteMessage()));
    setInitialSize(QSize(QApplication::desktop()->width(), QApplication::desktop()->height()));
}
void CDoodChatManagerModel::deleteAllMessage()
{
    QList<CDoodChatItem*> list = m_pChatMap.values();
    QStringList msgs;
    int len = list.size();
    for(int i =0;i<len;i++){
        CDoodChatItem* item = list.at(i);
        if(item != NULL){
            msgs.push_back(item->msgId());
        }
    }
    if(msgs.size()>0){
        emit deleteMessage(id(),msgs);
    }
}
void CDoodChatManagerModel::removeItemsByFromId(QString fromId)
{
    QList<CDoodChatItem*> list = m_pChatMap.values();
    QStringList msgs;
    int len = list.size();
    for(int i =0;i<len;i++){
        CDoodChatItem* item = list.at(i);
        if(item != NULL && item->fromId() == fromId){
            removeItem(item);
            msgs.push_back(item->msgId());
            m_pChatMap.remove(item->localId());
            delete item;
        }
    }
    if(msgs.size()>0){
        emit deleteMessage(id(),msgs);
    }

}
Beispiel #30
0
void MessageHandler::update(){
	for(int i = 0;i < m_MessagesToDelete->size();i++){
		for(int j = 0;j < m_Messages->size();j++){
			if((*m_Messages)[j] == (*m_MessagesToDelete)[i]){
				SafePtrRelease((*m_Messages)[j]);
				m_Messages->erase(m_Messages->begin()+j);
				break;
			}
		}
	}
	m_MessagesToDelete->clear();
	for(int i = 0;i < m_Messages->size();i++){
		(*m_Messages)[i]->timeToSend -= Util::instance()->getDelta()*100;
		if((*m_Messages)[i]->timeToSend <= 0){
			sendMessage((*m_Messages)[i]);
			deleteMessage((*m_Messages)[i]);
		}
	}
}