چت با RabbitmQ

چت با RabbitmQ ، در این مقاله، نحوه‏ ی توسعه ‏ی یک برنامه‏ ی چت با RabbitmQ به زبان سی شارپ و ASP.NET MVC خواهید آموخت. نخست، نیاز است RabbitMQ و OTP را دانلود کنید.

اگر بخش قبلی مطلب ما را نخوانده‏ اید همواره می‏توانید آن را در لینک‏ های زیر بخوانید.

مرحله ۱: چت با RabbitmQ

http://www.rabbitmq.com/download.html

چت با RabbitmQ

مرحله ۲: OTP

http://www.erlang.org/downloads

چت با RabbitmQ

یک پروژه ‏ی MVC جدید ایجاد کنید.

مرحله ۳: ویژوال استودیو را باز کنید

چت با RabbitmQ

به منوی File رفته و New Project->Web application->MVC را انتخاب کنید.

چت با RabbitmQ

از قسمت New Project، ASP.NET Web Application را انتخاب و OK را کلیک کنید.

چت با RabbitmQ

MVC را انتخاب و OK را کلیک کنید.

چت با RabbitmQ

در ویژوال استودیو، ساختار پوشه همانطور که در تصویر آمده برای برنامه ‏ی چت در پنجره‏ ی Solution Explorer نشان داده می‏شود.

چت با RabbitmQ

بر روی Project کلیک راست کرده و “Manage NuGet Packages..” را انتخاب کنید.

چت با RabbitmQ

Rabbitmq را جستجو کرده و پکیج rabbitmq.client را نصب کنید.

چت با RabbitmQ

افزودن HomeController جدید.
بر روی پوشه‏ ی Controllers کلیک راست کرده، Add >> Controller را کلیک کنید.

چت با RabbitmQ

هنگامیکه کاربر کنترل کننده را انتخاب کرد، کادر محاوره ‏ای “Add Scaffold” باز می‏شود.

MVC 5 Controller – Empty را انتخاب و دکمه ‏ی “Add” را کلیک کنید.

چت با RabbitmQ

چت با RabbitmQ

یک نام (HomeController) به Controller داده و “Add” را کلیک کنید.

چت با RabbitmQ

هنگامیکه کاربر بر روی دکمه ‏ی Add کلیک می‏کند، Workspace (فضای کاری) برای نوشتن کد باز خواهد شد.

چت با RabbitmQ

کد زیر را در HomeController کپی کنید.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using RabbitMQ.Client;  
using RabbitMQ.Util;  
using System.Web.Mvc;  
using ChatApplication.Models.HelperBll;  
using System.Web.UI.WebControls;  
  
namespace ChatApplication.Controllers  
{  
    public class HomeController : Controller  
    {  
        DataLayer dl = new DataLayer();  
        // GET: Home  
        public ActionResult Index()  
        {  
            if (Session["userid"]==null)  
            {  
                return RedirectToAction("login");  
            }  
            else  
            {  
                return View();  
            }  
        }  
        [HttpPost]  
        public JsonResult sendmsg(string message,string friend)  
        {  
            RabbitMQBll obj = new RabbitMQBll();  
            IConnection con = obj.GetConnection();  
            bool flag = obj.send(con, message,friend);  
            return Json(null);  
        }  
        [HttpPost]  
        public JsonResult receive()  
        {  
            try  
            {  
                RabbitMQBll obj = new RabbitMQBll();  
                IConnection con = obj.GetConnection();  
                string userqueue = Session["username"].ToString();  
                string message = obj.receive(con, userqueue);  
                return Json(message);  
            }  
            catch (Exception)  
            {  
  
                return null;  
            }  
  
             
        }  
        public ActionResult login()  
        {  
  
            return View();  
        }  
        [HttpPost]  
        public ActionResult login(FormCollection fc)  
        {  
            string email = fc["txtemail"].ToString();  
            string password = fc["txtpassword"].ToString();  
            UserModel user = dl.login(email, password);  
            if (user.userid > 0)  
            {  
                ViewData["status"] = 1;  
                ViewData["msg"] = "login Successful...";  
                Session["username"] = user.email;  
                Session["userid"] = user.userid.ToString();  
                return RedirectToAction("Index");  
            }  
            else  
            {  
  
                ViewData["status"] = 2;  
                ViewData["msg"] = "invalid Email or Password...";  
                return View();  
            }  
  
        }  
  
        [HttpPost]  
        public JsonResult friendlist()  
        {  
            int id = Convert.ToInt32(Session["userid"].ToString());  
            List<UserModel> users = dl.getusers(id);  
            List<ListItem> userlist = new List<ListItem>();  
            foreach (var item in users)  
            {  
                userlist.Add(new ListItem  
                {  
                    Value = item.email.ToString(),  
                    Text = item.email.ToString()  
  
                });  
            }  
            return Json(userlist);  
        }  
    }  
}   

یک جدول در پایگاه داده (PostgreSQL) ایجاد کنید.در ادامه کوئری یک جدول آمده است.

CREATE TABLE public.tbluser(userid integer NOT NULL DEFAULT nextval('tbluser_userid_seq'::regclass), email text COLLATE pg_catalog.  
    "default"  
    NOT NULL, mobile text COLLATE pg_catalog.  
    "default"  
    NOT NULL, password text COLLATE pg_catalog.  
    "default"  
    NOT NULL, dob date NOT NULL, CONSTRAINT tbluser_pkey PRIMARY KEY(userid))  

چت با RabbitmQ

رشته‏ ی اتصال را در فایل web.config در ASP.NET درج کنید.

چت با RabbitmQ

یک User Model در پوشه‏ ی Models ایجاد کنید. بر روی پوشه‏ ی Models کلیک راست <- Add را کلیک <- Class را انتخاب کنید.

چت با RabbitmQ

چت با RabbitmQ

کد زیر را در UserModel کپی کنید.

public class UserModel  
    {  
        public int userid { get; set; }  
        [Required(ErrorMessage ="Email id Is required")]  
        public string email { get; set; }  
        [Required(ErrorMessage = "Mobile Number Is required")]  
        public string mobile { get; set; }  
        [Required(ErrorMessage = "Password Is required")]  
        public string password { get; set; }  
        [Required(ErrorMessage = "Confirm Password Is required")]  
        [Compare("password", ErrorMessage = "Password and Confirmation Password must match.")]  
        public string confirmpassword { get; set; }  
        [Required(ErrorMessage = "Date Of Birth Is required")]  
        public string dob { get; set; }  
    }  

یک کلاس DataLayer.cs ایجاد کرده و آن را کپی کنید.

بر روی پوشه‏ ی Models کلیک راست <- Add را کلیک <- Class را انتخاب کنید.

چت با RabbitmQ

کد زیر را در DataLayer.cs کپی کنید.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using RabbitMQ.Client;  
using RabbitMQ.Util;  
using System.Web.Mvc;  
using ChatApplication.Models.HelperBll;  
using System.Web.UI.WebControls;  
  
namespace ChatApplication.Controllers  
{  
    public class HomeController : Controller  
    {  
        DataLayer dl = new DataLayer();  
        // GET: Home  
        public ActionResult Index()  
        {  
            if (Session["userid"]==null)  
            {  
                return RedirectToAction("login");  
            }  
            else  
            {  
                return View();  
            }  
        }  
        [HttpPost]  
        public JsonResult sendmsg(string message,string friend)  
        {  
            RabbitMQBll obj = new RabbitMQBll();  
            IConnection con = obj.GetConnection();  
            bool flag = obj.send(con, message,friend);  
            return Json(null);  
        }  
        [HttpPost]  
        public JsonResult receive()  
        {  
            try  
            {  
                RabbitMQBll obj = new RabbitMQBll();  
                IConnection con = obj.GetConnection();  
                string userqueue = Session["username"].ToString();  
                string message = obj.receive(con, userqueue);  
                return Json(message);  
            }  
            catch (Exception)  
            {  
  
                return null;  
            }  
  
             
        }  
        public ActionResult login()  
        {  
  
            return View();  
        }  
        [HttpPost]  
        public ActionResult login(FormCollection fc)  
        {  
            string email = fc["txtemail"].ToString();  
            string password = fc["txtpassword"].ToString();  
            UserModel user = dl.login(email, password);  
            if (user.userid > 0)  
            {  
                ViewData["status"] = 1;  
                ViewData["msg"] = "login Successful...";  
                Session["username"] = user.email;  
                Session["userid"] = user.userid.ToString();  
                return RedirectToAction("Index");  
            }  
            else  
            {  
  
                ViewData["status"] = 2;  
                ViewData["msg"] = "invalid Email or Password...";  
                return View();  
            }  
  
        }  
  
        [HttpPost]  
        public JsonResult friendlist()  
        {  
            int id = Convert.ToInt32(Session["userid"].ToString());  
            List<UserModel> users = dl.getusers(id);  
            List<ListItem> userlist = new List<ListItem>();  
            foreach (var item in users)  
            {  
                userlist.Add(new ListItem  
                {  
                    Value = item.email.ToString(),  
                    Text = item.email.ToString()  
  
                });  
            }  
            return Json(userlist);  
        }  
    }  
}   

یک کلاس RabbitMQBll.cs برای مدیریت عملیات Rabbitmq (پیوند، ارسال و دریافت) ایجاد کنید.

بر روی پوشه‏ ی Models کلیک راست <- Add را کلیک <- Class را انتخاب کنید.

چت با RabbitmQ

کد زیر را در RabbitMQBll.cs کپی کنید.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using RabbitMQ.Client;  
using RabbitMQ.Util;  
using RabbitMQ.Client.Events;  
using System.Text;  
  
namespace ChatApplication.Models.HelperBll  
{  
    public class RabbitMQBll  
    {  
        public IConnection GetConnection()  
        {  
            ConnectionFactory factory = new ConnectionFactory();  
            factory.UserName = "";  
            factory.Password = "";  
            factory.Port = 5672;  
            factory.HostName = "localhost";  
            factory.VirtualHost = "/";  
             
            return factory.CreateConnection();  
        }  
        public bool send(IConnection con,string message,string friendqueue)  
        {  
            try  
            {  
                IModel channel = con.CreateModel();  
                channel.ExchangeDeclare("messageexchange", ExchangeType.Direct);  
                channel.QueueDeclare(friendqueue, true, false, false, null);  
                channel.QueueBind(friendqueue, "messageexchange", friendqueue, null);  
                var msg = Encoding.UTF8.GetBytes(message);  
                channel.BasicPublish("messageexchange", friendqueue, null, msg);  
                  
            }  
            catch (Exception)  
            {  
  
                  
            }  
            return true;  
  
        }  
        public string receive(IConnection con,string myqueue)  
        {  
            try  
            {  
                string queue = myqueue;  
                IModel channel = con.CreateModel();  
                channel.QueueDeclare(queue: queue, durable: true, exclusive: false, autoDelete: false, arguments: null);  
                var consumer = new EventingBasicConsumer(channel);  
                BasicGetResult result = channel.BasicGet(queue: queue, autoAck: true);  
                if (result != null)  
                    return Encoding.UTF8.GetString(result.Body);  
                else  
                    return null;  
            }  
            catch (Exception)  
            {  
                return null;  
                  
            }  
             
        }  
    }  
} 

کد زیر را در Views -> Index.cshtml اضافه کنید.
بر روی متد Index در HomeController -> Add View کلیک راست کنید.

چت با RabbitmQ

به Index نام بدهید.

چت با RabbitmQ

کد زیر را در View کپی کنید.

   @using System.Web.Optimization  
@{  
    Layout = null;  
}  
  
<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <title>Index</title>  
    @Styles.Render("~/Content/css")  
    @Scripts.Render("~/bundles/jquery")  
    @Scripts.Render("~/bundles/bootstrap")  
    <script type="text/javascript">  
        $(document).ready(function () {  
            $("#btnsend").click(function () {  
                send();  
            });  
            getmyfriends();  
            function getmyfriends()  
            {  
                $.ajax({  
                    type: "POST",  
                    url: "@Url.Action("friendlist")",  
                    contentType: "application/json; charset=utf-8",  
                    data: '{}',  
                    dataType: "json",  
                    success: function (r) {  
                        var ddlfrined = $("[id*=ddlfriend]");  
                        // ddlfrined.empty().append('<option selected="selected" value="0">select</option>');  
                        for (var i = 0; i <r.length; i++) {  
                            ddlfrined.append($("<option></option>").val(r[i].Value).html(r[i].Text));  
                        }   
                    },  
                    error: function (r) {  
                        alert("error");  
                    }  
                });  
            }  
            setInterval(function () {  
                $.ajax({  
                    type: "POST",  
                    contentType: "application/json; charset=utf-8",  
                    data: '{}',  
                    url: "@Url.Action("receive")",  
                    dataType: "json",  
                    success: function (response) {  
                        var data = $("#divmsg").html();  
                        $("#divmsg").html(data + "<br>Friend:" + response);  
                          
                    },  
                    error: function (response) {  
                         
                    }  
                });  
            }, ۵۰۰۰);  
            function send() {  
                var message = $("#txtmsg").val();  
                var friend = $("#ddlfriend").val();  
                var data = $("#divmsg").html();  
                $("#divmsg").html(data + "<br>Me:" + message);  
                $("#txtmsg").val("");  
                debugger;  
                $.ajax({  
                    type: "POST",  
                    contentType: "application/json; charset=utf-8",  
                    data: '{"message":"' + message + '","friend":"'+friend+'"}',  
                    url: "@Url.Action("sendmsg")",  
                    dataType: "json",  
                    success: function (response) {  
                        var data = $("#divmsg").html();  
                        $("#divmsg").html(data + "<br>Me :" + message);  
                    },  
                    error: function (response) {  
  
                    }  
                });  
            }  
        });  
    </script>  
</head>  
<body>  
    <nav class="nav navbar-default">  
        <div class="navbar-brand">  
           <span style="float:right;">@Session["username"].ToString()</span>  
        </div>  
    </nav>  
    <br />  
    <div class="clearfix"></div>  
    @using (Html.BeginForm())  
    {  
        <div class="container">  
            <div class="row">  
                 
            </div>  
            <div class="row">  
                <div class="col-md-4">  
                    <div class="form-group">  
                        <select id="ddlfriend" name="ddlfriend" class="form-control">  
  
                        </select>  
                    </div>  
                    <div class="form-group">  
                        <input type="text" name="txtmsg" id="txtmsg" class="form-control" />  
                    </div>  
                    <div class="form-group">  
                        <input type="button" value="send" class="btn btn-success" name="btnsend" id="btnsend" />  
                    </div>  
                </div>  
                <div class="col-md-6">  
                    <div class="panel panel-success">  
                        <div class="panel-heading">  
                            <div class="panel-title">  
                                Messages  
                            </div>  
                            <div class="panel-footer" style="min-height:400px;">  
                                <div id="divmsg">  
                                </div>  
                            </div>  
                        </div>  
                    </div>  
                </div>  
            </div>  
        </div>  
    }  
    <div>  
   </div>  
</body>  
</html>   

F5 را برای ساخت (Build) و اجرای (Run) پروژه بفشارید.

چت با RabbitmQ

چت با RabbitmQ

دانلود فایل

دانلود با لینک مستقیم
پسورد فایل : www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.