Aplikasi Antrian
Aplikasi ini merupakan pengembangan dari sample aplikasi yg sudah pernah saya bahas pada postingan sebelumnya, aplikasi ini terdiri dari 2 project yaitu :
- Aplikasi server memanfaatkan array winsock karena akan menghandle minimal 1 koneksi
- Untuk aplikasi klien cukup menggunakan winsock standar (non array).
Sekarang akan kita bahas cara pembuatannya.
Aplikasi server
Aplikasi server menggunakan winsock yg dijadikan array karena akan menerima lebih dari 1 koneksi, untuk menjadikan sebuah winsock menjadi array cukup dengan mengeset properties index = 0
Selain itu agar sebuah winsock bisa menerima koneksi yg masuk, maka winsocknya harus dalam mode “Listen”, untuk keperluan ini kita akan menyiapkan sebuah fungsi misal dengan nama startListening
Private Function startListening(ByVal localPort As Long) As Boolean On Error GoTo errHandle If localPort > 0 Then 'If the socket is already listening, and it's listening on the same port, don't bother restarting it. If (wckServer(0).State <> sckListening) Or (wckServer(0).localPort <> localPort) Then With wckServer(0) Call .Close .localPort = localPort Call .Listen End With End If 'Return true, since the server is now listening for clients. startListening = True End If Exit Function errHandle: startListening = False End Function
Selanjutnya tinggal kita panggil pada event Form_Load
Private Sub Form_Load() '1234 adalah port yg digunakan untuk komunikasi 'antara server dan klien, nilainya bisa disesuaikan If startListening(1234) Then MsgBox "Status Server ON" Else MsgBox "Status Server OFF" End If End Sub
Selain itu ada beberapa kode yang harus kita lengkapi pada event2x yg dimiliki oleh winsock yaitu event Close, ConnectionRequest, DataArrival dan Error
Private Sub wckServer_Close(Index As Integer) ' Close the socket and raise the event to the parent. Call wckServer(Index).Close End Sub
Private Sub wckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long) Dim i As Long Dim j As Long Dim blnLoaded As Boolean On Error GoTo errHandle ' We shouldn't get ConnectionRequests on any other socket than the listener ' (index 0), but check anyway. Also check that we're not going to exceed ' the MaxClients property. If (Index = 0) Then ' Check to see if we've got any sockets that are free. For i = 1 To wckServer.UBound If (wckServer(i).State = sckClosed) Then j = i Exit For End If Next i ' If we don't have any free sockets, load another on the array. If (j = 0) Then blnLoaded = True Call Load(wckServer(wckServer.UBound + 1)) j = wckServer.Count - 1 End If ' With the selected socket, reset it and accept the new connection. With wckServer(j) Call .Close Call .Accept(requestID) End With End If Exit Sub ' errHandle: ' Close the Winsock that caused the error. Call wckServer(0).Close End Sub
Event ConnectionRequest berfungsi untuk memfilter koneksi yg masuk, jika ada koneksi yg masuk akan dilakukan pengecekan terlebih dulu apakah ada winsock yg idle (ngangur) jika ada maka koneksi tersebut akan langsung dihandle oleh winsock yg idle tadi, jika tidak maka akan diload terlebih dulu winsock yg baru kemudian langsung menghandle koneksi yg baru masuk tadi.
Teknik ini merupakah salah satu cara untuk melakukan optimasi program jangan sampai aplikasi server meload secara terus menerus objek winsock yg baru untuk setiap koneksi yg masuk.
Private Sub wckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim cmd As String On Error GoTo errHandle ' Grab the data from the specified Winsock object, and pass it to the parent. Call wckServer(Index).GetData(cmd) Select Case cmd Case "get_no_antrian" Call send(Index, CStr(noAntrian)) lblNoAntrian.Caption = noAntrian noAntrian = noAntrian + 1 ' naikkan counter nomor antrian Case Else Call send(Index, "perintah tidak dikenal") End Select Exit Sub errHandle: Call wckServer(Index).Close End Sub
Event DataArrival berfungsi untuk memproses data yg masuk, untuk kasus aplikasi antrian ini data yang paling valid hanya berupa string “get_no_antrian”, jika datanya valid akan langsung dikirimkan nomor antrian terakhir ke klien yg mengirimkan string “get_no_antrian” dg memanggil prosedur send.
Private Sub send(ByVal lngIndex As Long, ByVal strData As String) If (wckServer(lngIndex).State = sckConnected) Then Call wckServer(lngIndex).SendData(strData): DoEvents Else Exit Sub End If End Sub
Private Sub wckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) Call wckServer(Index).Close End Sub
Untuk aplikasi server sy rasa sudah cukup akan kita lanjutkan dg aplikasi klien.
Aplikasi Klien
Untuk aplikasi klien lebih sederhana lagi, yg kita butuhkan cukup sebuah fungsi untuk melakukan koneksi ke server
Private Const conTunggu As Long = 100000
Private Function isConnected(ByVal ipServer As String, ByVal port As Long) As Boolean Static i As Long On Error Resume Next If myClient.State <> sckClosed Then myClient.Close ' close existing connection myClient.RemoteHost = ipServer myClient.RemotePort = port myClient.Connect With myClient Do Until .State = sckConnected DoEvents i = i + 1 If i >= conTunggu Then i = 0 Exit Function End If Loop End With isConnected = myClient.State = sckConnected End Function
Contoh pemanggilan fungsi diatas seperti berikut :
Private Sub cmdAmbilNoAntrian_Click() Dim ipServer As String Dim cmd As String ipServer = "127.0.0.1" cmd = "get_no_antrian" ' 1234 ada port yg menyesuaikan port yg ada di server If isConnected(ipServer, 1234) Then myClient.SendData cmd End If End Sub
Untuk mengetahui data yang dikirim balik oleh server kita bisa memanfaatkan event DataArrival yg dimiliki oleh objek winsock
Private Sub myClient_DataArrival(ByVal bytesTotal As Long) Dim noAntrian As String On Error Resume Next myClient.GetData noAntrian lblNoAntrian.Caption = noAntrian End Sub
Selesai ๐
Aplikasi diatas belum menggunakan database sama sekali, sehingga jika aplikasi server ditutup maka counter nomor antrian akan dimulai dari 1 lagi, dan sy berharap tidak ada pertanyaan bagaimana menyimpan counter nomor antriannya ke database atw bagaimana cara menampilkan nomor atrian terakhir klo servernya error :D.
Selamat MENCOBA ๐
thank om…buat referensi nya…. ๐
Sama2x om
Wah tutorial ya makin mantap aja neh tuk coding4ever ….sukses selalu
Mas admin, mau tanya neh…..saya lagi coba buat program desktop dengan vb6 tapi koneksi ya mau online…nah,klw database di hosting kan berat tuk olah record/data ya…
saya mau jajal koneksi ya menggunakan VPN…ada tutorial ya gak mas tuk cara buat koneksi VPN….
Klo mau yg gratis dan gampang bisa mencoba hamachi, kalo mau yg gratis juga tapi agak sedikit ribet mungkin bisa mencoba OpenVPN.
Klw langsung buat VPN ya lwt windows gimana mas …. dari network connection ya …?
Klo langsung setau sy enggak bisa om
Ya mas saya jajal juga gak bisa-bisa,menurut mas admin gimana neh solusinya klw aplikasinya mau dibuat online saya harus menggunakan koneksi seperti apa agar olah record ya kyk clinet/server …saya guna’in database MySQL mas….Sebelumnya makasih banget mas admin atas penyampaian Ilmu dan saran ya ….
Yg jelas untuk kasus seperti ini sy biasanya menggunakan web service om.
Untuk web servicenya bisa pake VB .NET atw C# (klo sy pake bahasa ini).
Klw mau pake vb6 gimana mas solusi terbaik ya …Please help mas admin ……
Mungkin bukan solusi terbaik sih om, utk vb6 yg pernah sy coba koneksi antar cabang ya menggunakan VPN dg bantuan hamachi.
Kantor cabang dan pusat sama2x menggunakan koneksi speedy, tapi klo databasenya dihostingkan di ISP ini yg agak susah om.
Solusi lain yg bisa dicoba untuk servernya menggunakan layanan Virtual Private Server nah klo ini selain dapat ip public kita juga full akses ke server, untuk sewanya juga murah berkisar 300-500 rb tergantung fiturnya sih ๐
Oh, ok mas admin thaks……tp gini mas di tmp saya punya IP PUBLIC mas saya coba koneksi antar cabang berhasil seh, tp lemot klw guna’in IP Public ….
Ya seperti itu lah om klo langsung nembak database berat, makanya mulailah untuk mencoba teknologi lain semacam web service untuk kedepannya.
VB 6 bisa akses web service juga loh om, jadi untuk web servicenya bisa dicoding menggunakan VB .NET atw C# untuk klien mau tetap pake VB 6 juga enggak masalah.
Oke deh om sukses deh dg projectnya ๐
Waduh mas ribet buanget kyk ya sya semakin gak sanggup ne ….. memang harus tekun dan terus berusaha …… OK deh mas thaks buanget tuk penjelasannyaa…semoga sukses trs buat mas k4m4r82….. ๐
Oke om sama2x ๐
wah om kamar keren nih tipe pengembangan antriannya pake winsock
kalo kami lebih nyaman pake metod tarik data dari db.
sukses terus buat blognya, dan jangan berenti buat berbagi ya ๐
Iya om soalnya jauh lebih cepat, selain itu kan data yg ditransfer juga kecil, emg pake database apa om ? ๐
Om suhuu, mo tny. Jd crtny pgn mengembangkan aplikasi ini pake printer dotmatix dan kertasny roll paper. Dan the problem is, kertasny bablas T.T Ga mo berhenti om. Ini percobaan pake Epson LX 800, port USB. Ad saran ga om? Kalo pake kertas Letter biasa, kertasny jg bablas. Code yg ud tak pake:
Printer.Print lblNoAntrian.Caption
Printer.EndDoc
dan
Me.PrintForm
Dua2ny begitu T.T Mohon bantuan om.. Thx before,
Mf om suhu, ud solved nih. Buat tmn2 lainny, tak kasi referensi codingny.
Link: http://support.microsoft.com/kb/154078
Hee, makasi om suhu ๐
Oke om sippp ๐
mas admin gimana cara memanggil data antrian yang sudah keluar untuk di panggil ulang
Klo ini ya harus diisimpan ke database dulu om nomor antriannya, cara lainnya bisa juga menggunakan array atau class dictionary
maaf mas, kami ini masih awam jadi kurang nyambung, mohon bantuan kalau bisa di kirim contoh code array atau class dictionary ke email kami, makasih mas sebelumnya.
Wah report nih klo semua pengunjung minta dikirimin source code ๐
sorry mas kalau ngerepotin, tetapi terima kasih atas ilmu yang sudah di sharingkan oleh mas admin ini sungguh membantu kami yang awam untuk belajar semoga allah membalasnya.
Amin
Berarti udah bisa nyelesain sendiri nih kasusnya ๐
ikut nyimak dan ikut copas mas admin.
Oke om, yg penting jangan minta dikirimin source code juga ๐
Wah kalau itu belum dah gan. sy masih trial error dari petunjuk sang admin dlu. xixixi…ini juga masih trial error dlu gan.
Kalau menemui kesulitan baru sy tanya lagi gan. thx b4.
Nah klo ginikan baru manteb ๐
om admin, berarti ini tiap client butuh komputer ya??
saya pernah liat di bank, mereka cuma pake keyboard yg hanya tombol angkanya aja…
nah klo yg kayak gitu, gimana ya om??
Yah klo buat sendiri perangkatnya/beli, sama seperti di ATM yang perangkat inputnya diminimalis
oh gitu ya omz,
klo saya mau simpan ke database..
kodingnya ditaruh dimana ya omz??
di aplikasi servernya ya??
Yg akses ke database cukup aplikasi server aja, di klien cukup mengirim data seperti ini contohnya :
Ketika server menerima data diatas langsung diparsing, misal perintahnya adalah insert, nama tabelnya adalah barang trus data yg diinsertkan apa saja yaitu data1, data2 dan data3
Kode berikut mungkin bisa ngasih pencerahan ๐
mantafff.. om.. luar biasa…
ane coba dulu ya…
nanti klo ada masalah, boleh kan tanya lagi..
mudah2an ga bosan ๐
terima kasih om..
Oke om sipp ๐
sip……
trims q pengen coba ni…..
Silahkan om ๐
mas, mau nanya, gimana kalau client akan mengirim dua variabel ke server dengan winsock
dan bagaimana server menerimanya, mohon pencerahannya mas.
contoh nya spt ini
untuk client
Winsock1.SendData var1, var2 (contoh nya saja)
dan untuk menerimanya disisi server bagaimana mas.
mohon bantuannya.
terimakasih
Udah liat jawabannya sy di nomor #33 diatas belum om ?
Jadi waktu ngirimnya dipisah menggunakan separator misal karakter #
thanks mas bantuannya, udah ok.
satu lg mas, gmn caranya untuk membuat 2 counter terpisah mas?
misalnya client1, client2, client3 tergabung dalam satu counter misalnya teller,
sedangkan client 4, client5 tergabung dalam counter custommer service
jadi pada sisi server terdapat dua counter teller dan CS mas.
mohon bantuannya mas. terimakasih.
buat command yg berbeda misal client 1,2,3 mengirim data “get_no_antrian#1” kemudian untuk klien 4 dan 5 data “get_no_antrian#2”.
trus diserver juga otomatis mempunyai 2 variabel counter untuk menghandle masalah ini
mungkin OOT dengan coding diatas.. mas punya code buat menampilkan siaran TV di VB6 ? jadi di PC dipasangkan TV tuner.. trus siarannya nanti muncul di form yg di buat di VB6.. seperti tampilan dilayar antrian BANK gitu..
Coba disini om.
Om Kalo pake komponen itu layar tv ga bisa di buat besar yah?Ada solusi supaya tampilan nya bisa kita setting?atau ada komponen lain?
mantap neh om tks berat ilmu y ,mudah2an bermanfaat dan berguna ..trimakasih …
om sy jga prnah buat aplikasi antrian database ms acces, tp sya gag pakai winsock, dan aplikasinya sampai sekarang masih running well. yg sya tanyakan apa kelemahannya aplikasi antrian sya yg gag pakek winsock dengan mesin antrian om yg pakek winsock ? mohon pencerahanya om, thx… ๐
thanks gan aku langsung di coba nie,. ๐
maav ini pke b.pmrogram apa
q bru” bljar
mksi
bermanfaat banget ๐
gan kalau untuk membuat aplikasi pengontrolan proses belajar mengajar dengan banyak pc gimana ???
please share……
salam kenal mas, mw tanya nih, sy ud coba2 untuk menampilkan label “kasir ke” di form server kok gagal trus y, mhn pencerahannya mas..makasih…minal minul y mas…
Klo sample asli di atas jalan enggak ?
jalan mas…Perfect, tp saya ingin menambahkan texbox/label untuk menampilkan kasir ke di form server..helep mas
Enggak bisanya dimana om ? Harus spesifik nanyanya.
Yang sudah om coba juga sejauh mana ? Sy kan juga enggak tau alur program yg ingin om buat seperti apa.
pada form klien 01 ketika mengklik ambil antrian, maka di serevr jg keliatan label kasirnya..sy diajarin ya…, makasih perhatiannya
Pada saat klien ingin mengambil no antrian, kan perintahnya seperti berikut :
Coba perhatikan kode di atas data yg dikirim ke serverkan cuma “get_no_antrian”, jika ingin informasi kliennya nampil ya otomatis nomor kliennya juga harus dikirim. Contoh :
Karakter “#” digunakan sebagai karakter pemisah untuk mempermudah proses parsing di aplikasi server.
Selanjutnya di server tinggal di parsing menggunakan perintah Split.
mas, wonderfull,,,thanks y mas..moga2 selalu sehat dan lancar rezkinya…
Yuph sama2x
Amin
mas, kalo gak usa pakai winsock, tp code yg biasa2 aja, bisa minta source codenya gak? karna saya masih pemula dan coba2 membuat tugas sistem antrian ini, tolong ya mas
D’oh mahasiswa pemalas, jadi males juga membantunya
mas admin coding4ever terima kasih banyak yah sudah membantu tugas dari dosen saya….
saya tinggal kembangkan untuk ditambahkan suara…
semoga kebaikan mas admin selalu dibalas oleh allah swt … ๐
terima kasih ya mas,…
sukses selalu
Amin, sama2x om ๐
mas admin. bisa gak bikin bikin antrian portable yang ada isi pemutar videonya komplit. sekalian harganya berapa. n jangan mahal mahal ya.
nanti responya bales ke email saya ya mas admin. saya tunggu lo…