{"id":1200,"date":"2014-03-26T08:32:44","date_gmt":"2014-03-26T08:32:44","guid":{"rendered":"http:\/\/blog.jaringanhosting.com\/?p=1200"},"modified":"2014-03-26T09:09:11","modified_gmt":"2014-03-26T09:09:11","slug":"ajax-hosting-indonesia-aplikasi-chat-sederhana-menggunakan-ajax","status":"publish","type":"post","link":"https:\/\/blog.jaringanhosting.com\/index.php\/ajax-hosting-indonesia-aplikasi-chat-sederhana-menggunakan-ajax\/","title":{"rendered":"AJAX Hosting Indonesia JaringanHosting.com &#8211; Aplikasi Chat Sederhana Menggunakan AJAX"},"content":{"rendered":"<p style=\"text-align: left\"><strong><a title=\"AJAX Hosting Indonesia JaringanHosting.com\" href=\"http:\/\/jaringanhosting.com\/Indonesia-AJAX-Hosting\">AJAX<\/a>\u00a0<\/strong>adalah singkatan dari\u00a0<strong>A<\/strong>synchronous\u00a0JavaScript\u00a0and XML. Pada dasarnya ajax menggunakan\u00a0<strong>XMLHttpRequest<\/strong>\u00a0object Javascript untuk membuat request ke server secara asynchronous atau tanpa melakukan refresh halaman website.<br \/>\nBerikut ini adalah aplikasi Chat sederhana untuk menunjukkan penggunaan XMLHttpRequest (<a title=\"AJAX Hosting Indonesia JaringanHosting.com\" href=\"http:\/\/jaringanhosting.com\/Indonesia-AJAX-Hosting\">AJAX<\/a>) di <a title=\"ASP.NET 4.5.1 Hosting Indonesia JaringanHosting.com\" href=\"http:\/\/jaringanhosting.com\/Indonesia-ASP-NET-451-Hosting\">ASP.NET<\/a>. Ini adalah aplikasi chatting dimana komunikasi pada chat Antara satu dengan satu pengguna, tetapi nantinya dapat dengan mudah dikembangkan untuk mendukung pengguna multi -chatting juga.<\/p>\n<p>Jadi fungsi AJAXRequest () digunakan untuk mentransfer semua data antara browser dan server.<br \/>\nDalam aplikasi chat ini, beberapa bagian dari data (misalnya RequestCode, username, password) akan dikirim melalui header HTTP, dan beberapa data seperti pesan dan userlist dikirim dalam konten seperti biasanya.<br \/>\nAplikasi demo adalah sebuah aplikasi web ASP.NET. Menggunakan Microsoft SQL database untuk menyimpan pesan pengguna dan login pengguna.<br \/>\n<a title=\"JaringanHosting.com\" href=\"http:\/\/jaringanhosting.com\/Indonesia-Windows-Basic-Hosting-Paket\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1190\" alt=\"drupal hosting jaringanhosting.com\" src=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/banner-jarhost-21.png\" width=\"712\" height=\"280\" srcset=\"https:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/banner-jarhost-21.png 712w, https:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/banner-jarhost-21-300x117.png 300w\" sizes=\"(max-width: 712px) 100vw, 712px\" \/><\/a>Database. MDF termasuk dalam folder app_data, dan juga file &#8220;DatabaseScript.sql&#8221; berisi semua script database untuk setup database baru.\u00a0Saat ini, saya memiliki komentar kode untuk membuat history pesan dalam database disimpan prosedur, tetapi dapat diaktifkan jika seseorang ingin.<br \/>\nKomunikasi antara browser -&gt; Server -&gt; Browser dibuat dengan cara berikut:<br \/>\nClient (browser) mengirim permintaan bersama dengan RequestCode tersebut.<br \/>\nPermintaan kode parsing di server untuk menentukan request digunakan untuk apa. (Misalnya Login, Logout, SendMessage, ReceiveMessage, dll)<br \/>\n<a href=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/usr.png\"><img loading=\"lazy\" class=\"aligncenter  wp-image-1211\" alt=\"JaringanHosting.com\" src=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/usr.png\" width=\"812\" height=\"348\" srcset=\"https:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/usr.png 1354w, https:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/usr-300x128.png 300w, https:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2014\/03\/usr-1024x438.png 1024w\" sizes=\"(max-width: 812px) 100vw, 812px\" \/><\/a> Server menangani permintaan, memprosesnya dan mengirimkan Response yang sesuai kembali bersama dengan data yang diminta.<br \/>\nKlien penerima mengirim pesan ke Server. Setelah Server memiliki pesan untuk penerima, pesan dikirim dalam respon dari server.<br \/>\n<code>var MessagePollingInterval = 3000 ; \/\/ Interval of polling for message<br \/>\nvar OLUsersPollingInterval = 9000; \/\/ Interval of polling for online users<\/code><\/p>\n<p>Ini adalah variabel yang memegang interval polling.<br \/>\nPesan dipertukarkan dari dan ke server dengan cara dienkripsi. Algoritma enkripsi \/ dekripsi yang digunakan dalam aplikasi ini adalah simple substitution cipher.<br \/>\n<code>var EncryptionKey = 3; \/\/Encryption Key: 0 to disable encryption<\/code><br \/>\nIni memegang kunci enkripsi yang harus sama di klien dan server akhir.<\/p>\n<p>Berikut ini adalah fungsi enkripsi \/ dekripsi:<br \/>\n<code>function Encrypt(PlainText, Key) {<br \/>\nvar to_enc = PlainText.toString().replace(\/^\\n+\/, \"\").replace\u00a0(\/\\n+$\/, \"\"); \/\/Nozel: remove \\n<br \/>\nvar xor_key=Key;<br \/>\nvar the_res=\"\";\/\/the result will be here<br \/>\nfor(i=0;i&lt;to_enc.length;++i)<br \/>\n{<br \/>\n\/\/\/\/the_res += String.fromCharCode((xor_key ^ to_enc.charCodeAt(i)));<\/p>\n<p style=\"text-align: left\">\/\/Nozel: Xor Cipher .<br \/>\n\/\/But encoded characters are not always allowed in http headers<\/p>\n<p style=\"text-align: left\">if (to_enc.charCodeAt(i) &lt;= 32) {<br \/>\n\/\/Keep c as it is<br \/>\nthe_res += String.fromCharCode((to_enc.charCodeAt(i))); \/\/Nozel: Bypass<br \/>\n\/\/Invalid characters which are not supported in Http headers<br \/>\n}<br \/>\nelse {<br \/>\nthe_res += String.fromCharCode<br \/>\n((to_enc.charCodeAt(i)) - Key); \/\/Nozel: Normal substitution Cipher<br \/>\n}<br \/>\n}<br \/>\nreturn(the_res);<br \/>\n}<\/p>\n<p style=\"text-align: left\">function Decrypt(CipherText, Key) {<br \/>\nvar to_dec = CipherText;<br \/>\nvar xor_key = Key;<br \/>\nvar PlainText = \"\";<br \/>\nfor (i = 0; i &lt; to_dec.length; i++) {<\/p>\n<p>\/\/\/\/\/ PlainText += String.fromCharCode((xor_key ^ to_dec.charCodeAt(i)));<br \/>\n\/\/Nozel: Xor Cipher . But encoded characters are not always allowed in HTTP headers<\/p>\n<p>if (to_dec.charCodeAt(i) &lt;= 32) {<br \/>\n\/\/Keep c as it is<br \/>\nPlainText += String.fromCharCode((to_dec.charCodeAt(i)));<br \/>\n\/\/Nozel: Bypass Invalid characters which are not supported in HTTP headers<br \/>\n}<br \/>\nelse {<br \/>\nPlainText += String.fromCharCode<br \/>\n((to_dec.charCodeAt(i)) + Key); \/\/Nozel: Normal substitution Cipher<br \/>\n}<br \/>\n}<br \/>\nreturn (PlainText);<br \/>\n}<\/code><\/p>\n<p>Sebuah fungsi yang sama diterapkan di kode C# dalam penangan sisi server untuk melakukan enkripsi \/ dekripsi.<br \/>\nBerikut ini adalah potongan kode bagaimana pesan dikirim melalui permintaan Ajax:<br \/>\n<code>function SendMessage() {<br \/>\nif (ValidateSendMessageWindow()) {<br \/>\nvar URL = \"SecureChatServer.ashx\";<br \/>\nvar covert = \"False\";<br \/>\nif (URL == null) { alert(\"Request URL is Empty\"); }<br \/>\nelse {<br \/>\nHTMLmessage = document.getElementById('Message').value.toString().replace<br \/>\n(\/\\r\\n?\/g, '<br \/>');<br \/>\nmessage = Encrypt(HTMLmessage, EncryptionKey);<br \/>\nrecepient = Encrypt<br \/>\n(document.getElementById('Recepient').value, EncryptionKey);<br \/>\nAjaxRequest(ProcessSendMessageResponse, URL, \"POST\",<br \/>\n{Message:message , Recepient:recepient}, '', { RequestCode: 'SC005'});<br \/>\n\/\/.<br \/>\n\/\/.<br \/>\n\/\/.<br \/>\n}}}<\/code><br \/>\nSemua data yang dibutuhkan akan diteruskan ke fungsi &#8216;AjaxRequest&#8217; yang mengirimkan data ke handler generik &#8216;SecureChatServer.ashx&#8217;.<\/p>\n<p>Berikut adalah kode yang dieksekusi untuk RequestCode ini: SC005:<\/p>\n<pre>LoggedInUser = userlogin.IsUserLoggedIn(SessionID, UserIPAddress);\r\nif (LoggedInUser != null) \/\/ Check is user is logged in\r\n{\r\nMessages newMessage = new Messages(); \/\/ Message Data Access Layer\r\nMessage = Decrypt(context.Request.Params[\"Message\"],\r\nEncryptionKey); \/\/ Extract the message data from the request and decrypt it.\r\nRecepient = Decrypt(context.Request.Params[\"Recepient\"],\r\nEncryptionKey); \/\/ Extract the recipient data from the request and decrypt it.\r\nif (newMessage.WriteMessage(LoggedInUser, Recepient,\r\nMessage)) \/\/Write the message to database through Message Data access layer\r\n{\r\ncontext.Response.AddHeader(\"CustomHeaderJSON\",\r\n\"ResponseStatus:'RS-OK'\"); \/\/add the Success indicator to the response header\r\n}\r\nelse\r\n{\r\ncontext.Response.AddHeader(\"CustomHeaderJSON\",\r\n\"ResponseStatus:'RS-Failed'\"); \/\/add the Failure indicator to the response header\r\n}...<em id=\"__mceDel\">}<\/em>\r\n<em id=\"__mceDel\"><em id=\"__mceDel\"><\/em><\/em><\/pre>\n<p>Indikator keberhasilan \/ kegagalan respon baru ini ditambahkan dalam header HTTP dikirim kembali oleh server.<br \/>\nDan akhirnya setelah permintaan AJAX selesai, fungsi Handler dijalankan. Semua respon dari server tersedia dalam fungsi handler.<br \/>\nDalam hal ini, fungsi handler yang ditentukan adalah &#8216;ProcessSendMessageResponse&#8217;, dan berikut adalah definisinya:<br \/>\n<code>function ProcessSendMessageResponse() {<br \/>\nvar ResponseStatus = GetHeader(ResponseHeaderJSON, 'ResponseStatus');<br \/>\nif (ResponseStatus == \"RS-OK\") {<br \/>\n\/\/.<br \/>\n\/\/.<br \/>\n\/\/.<br \/>\n}}<\/code><\/p>\n<p>Seperti yang Anda lihat, nilai &#8216;ResponseStatus&#8217; diekstrak dari header HTTP Response yang sudah tersedia dalam fungsi. &#8216;ResponseHeaderJSON&#8217; adalah sebuah string JSON, fungsi &#8216;getHeader&#8217; digunakan untuk mengekstrak nilai tertentu di JSON String.<br \/>\nNilai &#8216;ResponseStatus&#8217; kemudian diperiksa untuk memberitahukan Sukses \/ Gagal dalam mengirim pesan.<br \/>\nProses yang sama digunakan untuk semua fungsi seperti Menerima pesan, Login, Logout, daftar Users Online, dll<br \/>\nSebagian besar fitur UI seperti Window dragging, tooltips, smooth show\/hide, dll diimplementasikan menggunakan JQuery perpustakaan.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AJAX\u00a0adalah singkatan dari\u00a0Asynchronous\u00a0JavaScript\u00a0and XML. Pada dasarnya ajax menggunakan\u00a0XMLHttpRequest\u00a0object Javascript untuk membuat request ke server secara asynchronous atau tanpa melakukan refresh halaman website. Berikut ini adalah aplikasi Chat sederhana untuk menunjukkan penggunaan XMLHttpRequest (AJAX) di ASP.NET. Ini adalah aplikasi chatting dimana<\/p>\n","protected":false},"author":2505,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/1200"}],"collection":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/users\/2505"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/comments?post=1200"}],"version-history":[{"count":0,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/1200\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/media?parent=1200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/categories?post=1200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/tags?post=1200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}