La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45422 - APLICACCION TIPO MESSENGER EN DELPHI
Autor:  Siko Maximus
Hola a todos.
En la empresa que estoy haciendo practicas estamos creando una aplicacion tipo messenger para red local mediante sockets.
La aplicacion funciona bien,(envia,recibe....),pero no sabemos que los diferentes usuarios tengan distintos tipos de letras(utilizamos un richtext).

Se puede hacer eso? Y si se puede como?

Gracias por adelantado.

  Respuesta:  Rodolfo Carlos Burlando Makthon
Bueno. primero deberas crear un servidor (msn teine una cola de servidores), segundo deberas crear los clientes. la idea de Socket es la mejor.

Tu Servidor debera crear un hilo nuevo por cada cliente que se conecte a él.

Debes definir un protocolo de comunicaciones, algo asi como una estructura de registro, en la cual hay datos basicos como por ejemplo: sender (quien envia), target (a quien envias), msg, parametros, id, estado, etc.

Este protocolo es un lenguaje comun entre el servidor y los clientes, hara mas facil la vida de comunicaciones.
En la parte de parametros puedes detallar que letra usas, de que color, tamaño, etc.
Observa snifiando como es el protocolo de msn o de emule. es parecido, donde la cadena se define de la siguiente forma:

tamaño-cadena, donde tamaño puede ser dos bytes y cadena es el concepto de lo que envias, cada cosa debe tener antecedido su propio tamaño.

essageSize LongIntegr 4 bytes (0xFFFFFFFF) Longitud total del mensaje, incluyendo estos 4 primeros bytes.
MessageType Byte 1 byte (0xFF) Indica el tipo de mensaje. Los valores posibles son:
0 tMT_System
1 tMT_Internal
2 tMT_ExternalSimple
3 tMT_TestRebound
CryptoFlag Byte 1 byte (0xFF)

Este valor es usado únicamente en el mensaje de LOGIN.
0 Crypto_Unsupported
1 Crypto_Supported
CryptoSeed 8 bytes

Valor aleatorio de 8 bytes de longitud donde cada byte puede ser un caracter ASCII comprendido dentro de Asc(33) y Asc(126).

Este valor es usado únicamente en el mensaje de LOGIN y si el valor de CryptoFlag es <> 0

Sender UserName ShortString Max. 30 Usuario del emisor.
IDModulo ShortString Max. 20 ID/Nombre del módulo que genera el mensaje en el emisor.
IDTransmisor ShortString Max. 20 ID/Nombre del Transmisor que genera el mensaje en el emisor.

arget UserName ShortString Max. 30 Usuario del destinatario.
IDModulo ShortString Max. 20 ID/Nombre del Módulo que debe recibir el mensaje.
IDTransmisor ShortString Max. 20 ID/Nombre del Transmisor que debe procesar el mensaje.

arameters ListSize Byte 1 byte (0xFF) Indicador del número de elementos de la lista
[1] .. [10] String

Lista de hasta como máximo 10 parámetros.

ata ListSize Byte 1 byte (0xFF) Indicador del número de élementos de la lista.
CompressFlag Byte 1 byte (0xFF)

Flags que indican si el contenido está comprimido. Cada bit corresponde a un contenido. Si el bit es establecido a 1, el contenido correspondiente está comprimido.
Bytes[1] .. [8] Binario Datos a enviar.

..... y asi creas un "Protocolo", ese es el corazon de tus comunicaciones amigo mio.

Saludos.