Kelanjutan dari
publikasi "Server push messages"Ketika mengembangkan bagian klien, tidak ada tujuan untuk mengulang dan membuat desain seperti yang lain.
Di sisi lain, mengubah dan membuat pengaturan area baru dalam versi desktop itu sulit. Area kontak di sebelah kiri, pesan di sebelah kanan, area input untuk pesan baru di bagian bawah tidak begitu mudah untuk menjadi lebih baik dan lebih nyaman. Dalam banyak solusi modern, elemen desain dan desain sama dengan program seluler. Saya pikir itu sebabnya tidak mungkin untuk memperluas bidang input pesan, untuk membuat dua atau lebih baris.

Pemisah garis putus-putus terlihat dalam gambar, ketika Anda mengarahkannya menjadi garis kuning-hitam. Dengan memindahkan pemisah, Anda dapat menyesuaikan ketinggian bidang untuk memasukkan pesan.
Demikian pula, Anda dapat mengubah lebar daftar kontak dan daftar pesan.
Mengirim pesan bersifat animasi, tidak ada animasi saat mengirim pesan di program lain.
Gradien abu-abu dan merah muda digunakan untuk latar belakang daftar kontak, kombinasi serupa dapat ditemukan di langit dalam bentuk cahaya.
Pengguna online memiliki warna oranye dari nama, kamar yang terhubung (grup) warna hitam. Pengguna tidak online dan grup yang dinonaktifkan berwarna abu-abu. Anda dapat membedakan ruangan dari pengguna di daftar kontak berdasarkan nama bintang, nama ruangan dimulai dengan ✯

Pengguna dapat membuat kamar baru (grup), menambahkan menghapus pengguna dari grup. Selain itu, dimungkinkan untuk mengubah kamar jika pengguna pengeditan memiliki bendera administrator dalam daftar pengguna kamar.

Dimungkinkan untuk mentransfer file, file gambar dikirim segera dalam pesan dan ditampilkan dalam pesan. File video tidak segera dikirim, hanya frame pertama yang dikirim, untuk mengunduh Anda harus menjalankan video. File lain juga diunduh dengan cara yang sama setelah mengklik file dalam pesan. Ukuran file maksimum, serta ukuran bagian file di mana file besar dibagi, dikonfigurasi dalam admin push0k. Untuk mengirim file, Anda dapat menggunakan tombol "kirim lampiran", Anda juga dapat dengan mudah menyeret dan meletakkan file ke jendela pesan. Demikian pula, file yang dikirim dari pesan dapat diseret ke folder Explorer atau finder di Mac OS. Dengan kata lain, drag & drop diterapkan untuk file.

Pesan adalah tag html yang dihapus. Tetapi ada penurunan harga yang mirip dengan penurunan harga.
*
berani *
~
cetak miring ~
_
bergaris bawah _
Anda dapat mengirim tautan, tetapi tautan tersebut harus berupa pesan terpisah.
Setiap pesan memiliki tombol:
"" Mengutip pesan
➦ penerusan pesan

Untuk koneksi yang aman ke server, tombol dengan kunci diterapkan. Logikanya mirip dengan browser - sertifikat tidak aman kedaluwarsa, ditandatangani sendiri atau dari nama domain lain, kuncinya terbuka - koneksi tidak aman. Tombol dengan kunci membuka informasi sertifikat.

Semua pengguna server terlihat satu sama lain, yaitu, kontak masing-masing pengguna adalah pengguna lain. Pengguna dapat mengganti nama kontak mereka. Dimungkinkan untuk memblokir pemberitahuan pesan baru dari kontak, Anda juga dapat sepenuhnya memblokir pesan dari kontak.

Pesan tidak menerapkan pengiriman senyum. Tidak ada koneksi video atau audio. Tidak ada cara untuk menunjukkan layar pengguna. Di masa depan, saya pasti akan menerapkan beberapa hal di atas.
Unduh klien push0k:
windowsOS MacAplikasi ini dibuat pada elektron menggunakan vue.js. Aplikasi ini gratis, tetapi tidak seperti server yang dijelaskan di bagian pertama artikel, saya belum berencana untuk membuka kode sumber.
Contoh Koneksi
Koneksi terdiri dari tiga bagian:
- Buat koneksi.
Untuk koneksi yang aman, ini adalah pesan jabat tangan. - Otorisasi
Selama otorisasi, selain login, hash dikirimkan dari id koneksi hash + password.
Dalam pesan otorisasi, parameter komputer ditransfer: jenis OS, versi OS, prosesor, memori, nama komputer. Data referensi ini diperlukan untuk statistik dan memahami bagaimana jenis OS, prosesor, dan memori mempengaruhi kecepatan koneksi, pertukaran data, dll.
Versi pertama dari program ini dibuat dan bekerja dari 1s. Biasanya, di satu komputer, tidak satu database 1c dapat diluncurkan, tetapi beberapa, misalnya, manajer memori dan BP di akuntan. Jika solusi tersebut digunakan untuk mendukung akuntansi, penting untuk memahami dari database mana pesan akuntan dikirim. Selama otorisasi, data basis data juga dikirimkan. - Sinkronisasi data.
Setelah menerima pesan tentang otorisasi yang berhasil, pesan permintaan data dengan tanggal dikirim ke server. Tanggal terbesar dari pesan terakhir atau perubahan terakhir dari pengguna atau kamar (grup). Pada tanggal yang dikirimkan, pesan baru atau pengguna yang berubah, kamar (grup) ditentukan. Tanggal bisa kosong, maka semua pesan diterima oleh pengguna dan kamar, ini bisa menjadi pertama kalinya Anda terhubung.
Setelah menerima data sinkronisasi, pesan yang mengkonfirmasikan penerimaan data dan waktu perhitungan "pengaturan koneksi", "otorisasi", dan "sinkronisasi data" dikirim ke server.
Hubungkan socket.io ke halaman html.
Untuk node.js
- buka konsol
- buka folder proyek perintah `cd / yourCatalog`
- jalankan perintah install `npm install socket.io`
Kode contoh 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()) + '"}' );