Пример #1
0
void * conexionCliente(void *socket_desc){
	socketStruct sock = *(socketStruct*) socket_desc;
	char **mensaje;
	char *ptr;
	char ** contestacion;
	int read_size,valor;
	char limitador[] = "\r\n";

	mensaje = (char**) calloc(100,sizeof(char*));
	contestacion = (char**)calloc(100,sizeof(char*));
	mensaje[sock.socketId] = (char*) calloc(512,sizeof(char));
	contestacion[sock.socketId] = (char*) calloc(512,sizeof(char));

	usersHash_beginWrite();
	usersHash_put(sock.socketId, "temp");
	usersHash_endWrite();

	sprintf(contestacion[sock.socketId],":%s 020 * :Please wait wile we process your connection to %s\r\n",servidor,servidor);
	if(eviarDatos((const void **) contestacion, strlen(contestacion[sock.socketId]), sock.socketId) == ERROR){
		syslog(LOG_ERR,"Error al enviar mensaje\n");
		return NULL;	
	}

	if(read_size = recibeDatos(sock.socketId,(void **) mensaje)<0){
		syslog(LOG_ERR,"Error al recibir el mensaje\n");
		return NULL;
	}

	ptr = strtok(mensaje[sock.socketId], limitador);
	ptr = strtok(NULL, limitador); 
	syslog(LOG_INFO,"%s %s\n",mensaje[sock.socketId],ptr);

	procesarMensaje(mensaje[sock.socketId],contestacion,sock.socketId);
	procesarMensaje(ptr,contestacion,sock.socketId);
	strcpy(mensaje[sock.socketId], "");
	syslog(LOG_INFO,"%s\n",mensaje[sock.socketId]);
	while( (read_size = recibeDatos(sock.socketId,(void **) mensaje)) > 0 ){
		syslog(LOG_INFO,"%s \n",mensaje[sock.socketId]);
		ptr = strtok(mensaje[sock.socketId], limitador);   
		procesarMensaje(mensaje[sock.socketId],contestacion,sock.socketId);
		valor = strlen(contestacion[sock.socketId]);
		if(eviarDatos((const void **) contestacion, valor, sock.socketId) == ERROR){
			syslog(LOG_ERR,"Error al enviar mensaje\n");
			return NULL;	
		}
	}
	return OK;
}
Пример #2
0
bool server::leerBloqueando(int id)
{
    //Reseteo el buffer que se va a completar con nuevos mensajes
    bzero(buffer,256);
    char *p = (char*)buffer;
    int messageLength = 0;

    int n = recv(m_listaDeClientes.getElemAt(id), p, MESSAGE_LENGTH_BYTES, 0);
    if (!lecturaExitosa(n, id))
    	return false;

    int acum = n;
    while (n < 4)
    {
 	   p += n;
 	   n = recv(m_listaDeClientes.getElemAt(id), p, MESSAGE_LENGTH_BYTES, 0);
       if (!lecturaExitosa(n, id))
       	return false;
 	   acum += n;
    }
    messageLength = m_alanTuring->decodeLength(buffer);

    p += n;
    messageLength -= acum;

    //loopea hasta haber leido la totalidad de los bytes necarios
    while (messageLength > 0)
    {
    	n = recv(m_listaDeClientes.getElemAt(id), p, messageLength, 0);
        if (!lecturaExitosa(n, id))
        	return false;
        p += n;
        messageLength -= n;
    }

    //resetea el timer de timeout
    m_listaTimeOuts.getElemAt(id).Reset();

    NetworkMessage netMsgRecibido = m_alanTuring->decode(buffer);

    ServerMessage serverMsg;
    serverMsg.clientID = id;
    serverMsg.networkMessage = netMsgRecibido;
 /*string my_str2 (buffer);
    mensije msg;
    msg.id = id;
    msg.texto = my_str2;*/

    procesarMensaje(&serverMsg);
    return true;
}
void ManejadorDeColaDeMensajes::run() {
	mensaje m;
	int resultado;
	while(sigint_handler.getGracefulQuit() == 0) {
		string s = "";
		resultado = colaDeMensajes.leer(tipoALeer, &m);
			if (resultado == -1)
				continue;
		while (m.status == STATUS_INCOMPLETO) {
			s.append(m.texto);
			resultado = colaDeMensajes.leer(tipoALeer, &m);
			if (resultado == -1)
			    continue;
		}
		s.append(m.texto);
		procesarMensaje(m, s);
	}
}
Пример #4
0
void* server::procesar(void)
{
	while(this->isRunning())
	{

		//Chekea timeouts
		checkTimeOuts();

		//Procesa cola
		if (m_mensajesAProcesar.size() != 0)
		{
			ServerMessage serverMsg = m_mensajesAProcesar.remove();
			// BLOQUE DE PROCESAMIENTO
			procesarMensaje(&serverMsg);


			// BLOQUE DE PROCESAMIENTO
			//m_queuePost[serverMsg.clientID].add(serverMsg);

		}

	}
}