Continuación de la
publicación "Mensajes push del servidor"Al desarrollar la parte del cliente, no había meta para repetir y hacer el diseño como los demás.
Por otro lado, cambiar y hacer una nueva disposición de áreas en la versión de escritorio es difícil. El área de contacto a la izquierda, el mensaje a la derecha, el área de entrada para un nuevo mensaje en la parte inferior, no es tan fácil de hacer mejor y más conveniente. En muchas soluciones modernas, el diseño y los elementos de diseño son los mismos con los programas móviles. Creo que es por eso que es imposible expandir el campo de entrada del mensaje, para hacer dos o más líneas.

El separador de línea discontinua es visible en la imagen, cuando pasa el mouse se vuelve amarillo-negro a rayas. Al mover el separador, puede ajustar la altura del campo para ingresar mensajes.
Del mismo modo, puede cambiar el ancho de la lista de contactos y la lista de mensajes.
El envío de mensajes es animado, no hubo animación al enviar mensajes en otros programas.
Se utiliza un degradado de gris y rosa para el fondo de la lista de contactos, una combinación similar se puede encontrar en el cielo en forma de resplandor.
Los usuarios en línea tienen un color naranja del nombre, salas conectadas (grupos) de color negro. Los usuarios no están en línea y los grupos deshabilitados son grises. Puede distinguir una sala de un usuario en la lista de contactos por nombre de estrella, los nombres de sala comienzan con ✯

Los usuarios pueden crear nuevas salas (grupos), agregar eliminar usuarios de los grupos. Además, es posible cambiar salas si el usuario de edición tiene un indicador de administrador en la lista de usuarios de salas.

Es posible transferir archivos, los archivos de imagen se envían inmediatamente en el mensaje y se muestran en el mensaje. Los archivos de video no se envían de inmediato, solo se envía el primer fotograma, para descargar debe ejecutar el video. Otros archivos se descargan de manera similar solo después de hacer clic en el archivo en el mensaje. El tamaño máximo del archivo, así como el tamaño de la parte del archivo en la que se dividen los archivos grandes, se configura en push0k admin. Para enviar un archivo, puede usar el botón "enviar archivo adjunto", también puede simplemente arrastrar y soltar el archivo en la ventana del mensaje. Del mismo modo, un archivo enviado desde un mensaje puede arrastrarse al Explorador o la carpeta del buscador en Mac OS. En otras palabras, arrastrar y soltar se implementa para los archivos.

Los mensajes son etiquetas html eliminadas. Pero hay un descuento similar al descuento.
*
negrita *
~
cursiva ~
_
subrayado _
Puede enviar enlaces, pero el enlace debe ser un mensaje separado.
Cada mensaje tiene botones:
"" Citando el mensaje
➦ reenvío de mensajes

Para una conexión segura al servidor, se implementa un botón con un candado. La lógica es similar a la de los navegadores: un certificado inseguro caducado, autofirmado o de otro nombre de dominio, el bloqueo está abierto, la conexión no es segura. El botón con el candado abre la información del certificado.

Todos los usuarios del servidor son visibles entre sí, es decir, los contactos de cada usuario son otros usuarios. Los usuarios pueden cambiar el nombre de sus contactos. Es posible bloquear las notificaciones de nuevos mensajes de un contacto, también puede bloquear completamente los mensajes de un contacto.

Los mensajes no implementan el envío de sonrisas. No hay conexión de video o audio. No hay forma de demostrar la pantalla del usuario. En el futuro, definitivamente implementaré algunos de los anteriores.
Descargar cliente push0k:
ventanasMac OSLa aplicación se realiza en electrón usando vue.js. La aplicación es gratuita, pero a diferencia del servidor descrito en la primera parte del artículo, todavía no planeo abrir el código fuente.
Ejemplo de conexión
La conexión consta de tres partes:
- Establece una conexión.
Para una conexión segura, este es un mensaje de apretón de manos. - Autorización
Durante la autorización, además del inicio de sesión, se transmite un hash desde la contraseña hash + id de conexión.
En el mensaje de autorización, se transfieren los parámetros de la computadora: tipo de sistema operativo, versión del sistema operativo, procesador, memoria, nombre de la computadora. Estos datos de referencia son necesarios para las estadísticas y para comprender cómo el tipo de sistema operativo, procesador y memoria afecta la velocidad de conexión, intercambio de datos, etc.
Las primeras versiones del programa fueron hechas y trabajadas desde 1s. Por lo general, en una computadora, no se puede iniciar una base de datos 1c, sino varias, por ejemplo, un administrador de memoria y un BP en un contador. Si la solución se utiliza para respaldar la contabilidad, es importante comprender desde qué base de datos se envió el mensaje del contador. Durante la autorización, también se transmiten los datos de la base de datos. - Sincronización de datos.
Después de recibir un mensaje sobre la autorización exitosa, se envía un mensaje de solicitud de datos con una fecha al servidor. La fecha más grande del último mensaje o último cambio de un usuario o sala (grupo). Por la fecha de transmisión, los mensajes nuevos o los usuarios modificados, se determinan las salas (grupos). La fecha puede estar vacía, luego todos los mensajes son recibidos por los usuarios y las salas, esta puede ser la primera vez que se conecta.
Después de recibir los datos de sincronización, se envían al servidor mensajes que confirman la recepción de los datos y el tiempo calculado de "configuración de conexión", "autorización" y "sincronización de datos".
Conecte socket.io a la página html.
Para node.js
- consola abierta
- vaya a la carpeta del proyecto el comando `cd / yourCatalog`
- ejecute el comando de instalación `npm install socket.io`
Código de ejemplo de Node.js:
const io = require('socket.io-client'); const crypto = require('crypto'); const os = require('os'); const cpusarray = os.cpus(); let actiontime = 0; let contime = 0; let auftime = 0; let datasintime = 0; let socket; let lastdatesync = new Date(0).toISOString(); let usernumber = '+7 (999) 777-77-77'; let pw = 'somePassword'; let baseref = process.cwd(); let basename = 'push0k client'; let baseid = crypto .createHash('md5') .update(appdirectory) .digest('hex'); baseid = baseid.substring(0, 8) + '-' + baseid.substring(8, 12) + '-' + baseid.substring(12, 16) + '-' + baseid.substring(16, 20) + '-' + baseid.substring(20, 32); let basever = '19.02'; let clientid = crypto .createHash('md5') .update(os.hostname()) .digest('hex'); clientid = clientid.substring(0, 8) + '-' + clientid.substring(8, 12) + '-' + clientid.substring(12, 16) + '-' + clientid.substring(16, 20) + '-' + clientid.substring(20, 32); let syncdata = ''; let syncdatasize = 0; function sha256(p) { const hash = crypto.createHash('sha256'); hash.update(p); return '' + hash.digest('hex'); } function connect() { socket = io('http://yourServer.com:6789', { transports: ['websocket'], timeout: 5000 }); socket.connect(); socket.on('connect', onconnect); socket.on('message', onmessage); actiontime = new Date().getTime(); } function onconnect() { contime = new Date().getTime() - actiontime; usernumber = usernumber.replace(/\D/g, ''); socket .binary(false) .emit( 'message', '{"event":"auf","user":"' + usernumber + '","password":"' + sha256(pw + socket.id) + '","roomsjoin":true,"basename":"' + basename + '","basever":"' + basever + '","baseid":"' + baseid + '","baseref":"' + encodeURIComponent(baseref) + '","osversion":"' + encodeURIComponent(os.release()) + '","appversion":"18.08","clientid":"' + clientid + '","infappview":"","ram":"' + os.totalmem() / 1024 / 1024 + '","proc":"' + encodeURIComponent(cpusarray[0].model) + '","ostype":"' + encodeURIComponent(os.type() + ' ' + os.arch()) + '","compname":"' + encodeURIComponent(os.hostname()) + '"}' );