Wah, sudah lama tidak update blog. Ini karena saya yang memang sulit sekali mengekspresikan yang ada di kepala saya.
Sebenarnya banyak yang mau di share hanya saja, menurutku terlalu basic dan obvious bagi banyak orang, akhirnya saya mengurungkan niat karena tidak pede sama bahannya.
Sudah lama saya menguasai basic C tapi belum pernah saya pakai ilmunya kecuali untuk mempelajari linux (yah, awalnya saya belajar C hanya untuk itu)...dan untuk belajar network lebih dalam lagi (u know, edit payload paket dan sebagainya etecetera). Karena kupikir sayang sekali pelajari C hanya untuk itu, jadi iseng-iseng bikin project kecil-kecilan sekalian ngetest pakai github (dan lagi-lagi saya tidak pede mau create repo disana setelah liat repo-repo yang populer)
Kali ini saya membuat multi-client chat server saya namai MCS (well, sebenarnya itu akronim salah eja sih, seharusnya MCC atau multi-client chat tapi siapa juga yang peduli .-. )
Langsung saja, segala sourcenya (kecuali gtk 3) bisa dilihat dan disedot di sini
bagi yang ingin clone bisa di
https://github.com/genomexyz/MCS.gitatau bisa juga langsung saja ke sini dilihat disitu ada semua. Saya jelaskan sedikit bagaimana ini semua bekerja
Pertama server menjalankan ritual-ritual default untuk socket, server hanya akan melisten batas sampai 100 user yang connect, tiap koneksi yang di accept akan di buat thread baru khusus untuk menghandle komunikasinya dengan socket yang di accept tadi dan yah batas untuk threadnya sama dengan batas yang akan di listen oleh server yaitu 100 (di source code saya men-define nya sebagai BACKLOG).
Dalam thread khusus yang baru tadi, server akan terus berkomunikasi dengan client dibagi dalam 3 fase : fase join, fase utama, fase keluar. Fase join, client akan memberitahu server kalau client ingin bergabung ke server dengan protokol yang sudah di tentukan, setelah berhasil tergabung semua client yang tergabung dengan server yang sudah mencapai fase utama akan di beritahu tentang telah bergabungnya client baru, dan setelah itu client akan masuk ke fase utama. Di fase utama user sudah bisa mengirim dan menerima pesan chat dari user lain bebas.
Ketika ada user keluar (menutup window client atau lain-lainnya) di sisi server, client akan menuju fase keluar dan akan mengumumkan ke user lain kalau dia telah keluar,
Yah, sangat simple memang. Oh iya, penambahan fitur terakhir yang saya berikan pada server yaitu thread collector. Saya sadar, karena saya memakai array pthread untuk thread yang akan di create setiap client yang tergabung, saya harus mentrack thread mana saja yang sudah habis di pakai dan bisa di pakai kembali. Saya tau di google dengan sekali searching akan dapat algoritma yang lebih robust dari ini, hanya saja saya ingin memecahkan masalah ini dengan cara saya sendiri karena lebih menarik.
untuk client karena tidak terlalu rumit (yah, server pun kerjanya simple) dan tidak terlalu menarik untuk di jelaskan (kesulitan di client hanya di GTK nya) jadi saya tidak akan menjelaskannya, Lebih dalam lagi silahkan liat di link yang sudah saya berikan tadi.
Oh iya, ini sebenarnya belum selesai. Akan dilanjutkan ketika saya mood nanti
Komentar
Posting Komentar