在Asp.net上使用CheckBox过滤数据(在chatHub用户中),我该怎么办?

时间:2018-07-29 13:58:50

标签: asp.net asp.net-mvc asp.net-mvc-5

我正在尝试使用选定的复选框过滤“聊天”中的在线用户,这是聊天视图的示例,我在数据库中有此表: connectedUserChat-用户连接到聊天时(id,登录时间以及更多插入数据库) userAddress(当用户注册时(地址随数据库的纬度和经度一起插入)

this is the sample of the chat view

现在,当用户单击复选框之一时,在线用户将根据复选框的值进行更改。

这是我的聊天中心类:

[HubName("forplaychat")]
public class ChatHub : Hub
{

    public static string emailIDLoaded = "";

    public void Connect(string userName, string email)
    {
        emailIDLoaded = email;
        var id = Context.ConnectionId;
        using (ApplicationDbContext dbo = new ApplicationDbContext())
        {
            var item = dbo.connectedUsersChat.FirstOrDefault(x => x.Email == email);
            if (item != null)
            {
                dbo.connectedUsersChat.Remove(item);
                dbo.SaveChanges();

                // Disconnect
                Clients.All.onUserDisconnectedExisting(item.ConnectionId, item.UserName);
            }

            var Users = dbo.connectedUsersChat.ToList();
            string logintime = DateTime.Now.ToString();
            string UserImg = GetUserImage(userName);

            if (Users.Where(x => x.Email == email).ToList().Count == 0)
            {

                var userdetails = new ConnectedUsersChat
                {

                    ConnectionId = id,
                    UserName = userName,
                    UserImage = UserImg,
                    Email = email,
                    LoginTime = logintime
                };
                dbo.connectedUsersChat.Add(userdetails);
                dbo.SaveChanges();

                // send to caller
                var connectedUsers = dbo.connectedUsersChat.ToList();
                var CurrentMessage = dbo.messages.ToList();


                Clients.Caller.onConnected(id, userName, connectedUsers, CurrentMessage);
            }

            // send to all except caller client
            Clients.AllExcept(id).onNewUserConnected(id, userName, UserImg, email, logintime);
        }
    }

    public void Send(string name, string message, string time)
    {
        string UserImg = GetUserImage(name);
        // store last 100 messages in cache
        AddMessageinCache(name, message, time, UserImg);

        // Broad cast message
        Clients.All.messageReceived(name, message, time, UserImg);

    }

    private void AddMessageinCache(string userName, string message, string time, string UserImg)
    {
        using (ApplicationDbContext dbo = new ApplicationDbContext())
        {
            var details = new Messages
            {
                UserName = userName,
                Message = message,
                Time = time,
                UserImage = UserImg



            };
            dbo.messages.Add(details);
            dbo.SaveChanges();


        }
    }

    // get user image, if user image is null, image will be=dummy, if there is image so
    // we will convert it form byte64 to string.
    public string GetUserImage(string username)
    {
        string serverPath = HttpContext.Current.Server.MapPath("ForePlay/assets/images");
        string RetimgName = serverPath + "dummy.png";
        try
        {
            var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
            var currentUser = manager.FindByName(username);

            string imageBase64Data = Convert.ToBase64String(currentUser.UserPhoto);
            string imageDataURL = string.Format("data:image/png;base64,{0}", imageBase64Data);


            if (imageDataURL != "")
                RetimgName = imageDataURL;
        }
        catch (Exception ex)
        { }
        return RetimgName;
    }

    //Clear Chat History
    // public void clearTimeout() {


    // }
    // }

    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
    {
        using (ApplicationDbContext dbo = new ApplicationDbContext())
        {
            var item = dbo.connectedUsersChat.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
            if (item != null)
            {
                dbo.connectedUsersChat.Remove(item);
                dbo.SaveChanges();

                var id = Context.ConnectionId;
                Clients.All.onUserDisconnected(id, item.UserName);
            }
        }
        return base.OnDisconnected(stopCalled);
    }

这是我的聊天视图:

<script type="text/javascript">


         var IntervalVal;

        // setup hub connection
        var hub = $.connection.forplaychat;
        registerClientMethods(hub);

        //start the hub
        $.connection.hub.start().done(function () {

            registerEvents(hub)


        });


        // Reset Message Counter on Hover
        $("#discussion").mouseover(function () {

            $("#MsgCountMain").html('0');
            $("#MsgCountMain").attr("title", '0 New Messages');
        });

        // Diplay Image Preview on File Upload
        $(document).on('change', '#<%# FileUpload1.ClientID%>', function (e) {

            var tmppath = URL.createObjectURL(e.target.files[0]);
            $("#ImgDisp").attr('src', tmppath);

        });

        // Stop Title Alert
        window.onfocus = function (event) {
            if (event.explicitOriginalTarget === window) {

                clearInterval(IntervalVal);
                document.title = 'ForPlay Chat App';
            }
        }




    // Show Title Alert
    function ShowTitleAlert(newMessageTitle, pageTitle) {
        if (document.title == pageTitle) {
            document.title = newMessageTitle;
        }
        else {
            document.title = pageTitle;
        }
    }



            function registerEvents(hub) {

                // get the current user name and his email and sent to hub.server.connect
                var name = "@currentUser.UserName";
                var email = "@currentUser.Email";

                if (name.length > 0 && email.length>0) {
                    hub.server.connect(name,email);

                }

                // when i able to connect hub i will make here what i need.
                hub.server.hello("signlr working");


                // Clear Chat-Without Delete all the message on the database just the chat screen.
                $('#btnClearChat').click(function () {

                    var msg = $("#discussion").html();

                    if (msg.length > 0) {
                        $('#discussion').html('');

                    }
                });

                // Send Button Click Event
                $('#btnSendMsg').click(function () {

                    var msg = $("#txtMessage").val();

                    if (msg.length > 0) {

                        var userName = $('#hdUserName').val();

                        var date = GetCurrentDateTime(new Date());

                        hub.server.send(userName, msg, date);
                        $("#txtMessage").val('');
                    }
                });

                // Send Message on Enter Button
                $("#txtMessage").keypress(function (e) {
                    if (e.which == 13) {
                        $('#btnSendMsg').click();
                    }
                });



            }



            function registerClientMethods(hub) {
                // Calls when user successfully logged in/enter to Chat Page
                hub.client.onConnected = function (id, userName, allUsers, messages, times) {

                    $('#hdId').val(id);
                    $('#hdUserName').val(userName);
                    $('#spanUser').html(userName);



                    // Add All Users
                    for (i = 0; i < allUsers.length; i++) {

                        AddUser(hub, allUsers[i].ConnectionId, allUsers[i].UserName, allUsers[i].UserImage, allUsers[i].LoginTime);
                    }

                    //Add Existing Messages
                    for (i = 0; i < messages.length; i++) {
                        AddMessage(messages[i].UserName, messages[i].Message, messages[i].Time, messages[i].UserImage);

                    }
                }

                hub.client.onNewUserConnected = function (id, name, UserImage, loginDate, email) {
                    $('#imageUser').val(UserImage);
                    AddUser(hub, id, name, loginDate, email);
                }

                // On User Disconnected
                hub.client.onUserDisconnected = function (id, userName) {

                    $('#Div' + id).remove();

                    var ctrId = 'private_' + id;
                    $('#' + ctrId).remove();


                    var disc = $('<div class="disconnect">"' + userName + '" logged off.</div>');

                    $(disc).hide();
                    $('#divusers').prepend(disc);
                    $(disc).fadeIn(200).delay(2000).fadeOut(200);

                }
                hub.client.messageReceived = function (userName, message, time, userimg) {

                    AddMessage(userName, message, time, userimg);

                    // Display Message Count and Notification
                    var CurrUser1 = $('#hdUserName').val();
                    if (CurrUser1 != userName) {

                        var msgcount = $('#MsgCountMain').html();
                        msgcount++;
                        $("#MsgCountMain").html(msgcount);
                        $("#MsgCountMain").attr("title", msgcount + ' New Messages');
                        var Notification = 'New Message From ' + userName;
                        IntervalVal = setInterval("ShowTitleAlert('For Play Chat App', '" + Notification + "')", 800);

                    }
                }

                hub.client.sendPrivateMessage = function (windowId, fromUserName, message, userimg, CurrentDateTime) {

                    var ctrId = 'private_' + windowId;
                    if ($('#' + ctrId).length == 0) {

                        OpenPrivateChatBox(hub, windowId, ctrId, fromUserName, userimg);

                    }

                    var CurrUser = $('#hdUserName').val();
                    var Side = 'right';
                    var TimeSide = 'left';

                    if (CurrUser == fromUserName) {
                        Side = 'left';
                        TimeSide = 'right';

                    }
                    else {
                        var Notification = 'New Message From ' + fromUserName;
                        IntervalVal = setInterval("ShowTitleAlert('SignalR Chat App', '" + Notification + "')", 800);

                        var msgcount = $('#' + ctrId).find('#MsgCountP').html();
                        msgcount++;
                        $('#' + ctrId).find('#MsgCountP').html(msgcount);
                        $('#' + ctrId).find('#MsgCountP').attr("title", msgcount + ' New Messages');
                    }

                    var divChatP = '<div class="direct-chat-msg ' + Side + '">' +
                        '<div class="direct-chat-info clearfix">' +
                        '<span class="direct-chat-name pull-' + Side + '">' + fromUserName + '</span>' +
                        '<span class="direct-chat-timestamp pull-' + TimeSide + '"">' + CurrentDateTime + '</span>' +
                        '</div>' +

                        ' <img class="direct-chat-img" src="' + userimg + '" alt="Message User Image">' +
                        ' <div class="direct-chat-text" >' + message + '</div> </div>';

                    $('#' + ctrId).find('#divMessage').append(divChatP);

                    // Apply Slim Scroll Bar in Private Chat Box
                    var ScrollHeight = $('#' + ctrId).find('#divMessage')[0].scrollHeight;
                    $('#' + ctrId).find('#divMessage').slimScroll({
                        height: ScrollHeight
                    });
                }
            }

            // get the date and return as day/month/year and time
            function GetCurrentDateTime(now) {

                var localdate = dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

                return localdate;
            }


                    function AddUser(hub, id, name, UserImage, date, email) {

                        var userId = $('#hdId').val();
                        var email = "@currentUser.Email";

                        var code, Clist;
                        if (userId == id) {

                            code = $('<div class="box-comment">' +
                                '<img class="img-circle img-sm"  img src="' + UserImage + '" alt="User Image" style="max-width:50px; max-height:50px;/>' +
                                ' <div class="comment-text">' +
                                '<span class="username">' + name + '<span class="text-muted pull-right">' + date + '</span>  </span></div></div>');


                            Clist = $(
                                '<li style="background:#494949;">' +
                                '<a href="#">' +
                                '<img class="contacts-list-img" src="' + UserImage + '" alt="User Image" style="max-width:50px; max-height:50px; />' +

                                ' <div class="contacts-list-info">' +

                                ' <span class="contacts-list-name" id="' + id + '">' + name + ' <small class="contacts-list-date pull-right">' + date + '</small> </span>' +
                                ' <span class="contacts-list-msg">How have you been? I was...</span></div></a > </li >');

                        }
                        else {

                            code = $('<div class="box-comment" id="Div' + id + '">' +
                                '<img class="img-circle img-sm" src="' + UserImage + '" alt="User Image" style="max-width:50px; max-height:50px; />' +

                                ' <div class="comment-text">' +
                                '<span class="username">' + '<a id="' + id + '" class="user" >' + name + '<a>' + '<span class="text-muted pull-right">' + date + '</span>  </span></div></div>');


                            Clist = $(
                                '<li>' +
                                '<a href="#">' +
                                '<img class="contacts-list-img" src="' + UserImage + '" alt="User Image" style="max-width:50px; max-height:50px; />' +
                                ' <div class="contacts-list-info">' +
                                '<span class="contacts-list-name" id="' + id + '">' + name + ' <small class="contacts-list-date pull-right">' + date + '</small> </span>' +
                                ' <span class="contacts-list-msg">How have you been? I was...</span></div></a > </li >');


                            var UserLink = $('<a id="' + id + '" class="user" >' + name + '<a>');
                            $(code).click(function () {

                                var id = $(UserLink).attr('id');

                                if (userId != id) {
                                    var ctrId = 'private_' + id;
                                     OpenPrivateChatBox(hub, id, ctrId, name);

                                }

                            });

                            var link = $('<span class="contacts-list-name" id="' + id + '">');
                            $(Clist).click(function () {

                                var id = $(link).attr('id');

                                if (userId != id) {
                                    var ctrId = 'private_' + id;
                                      OpenPrivateChatBox(hub, id, ctrId, name);

                                }

                            });

                        }

                        $("#divusers").append(code);

                        $("#ContactList").append(Clist);

                    }



                    function AddMessage(userName, message, time, userimg) {

                        var CurrUser = $('#hdUserName').val();
                        var Side = 'right';
                        var TimeSide = 'left';

                        if (CurrUser == userName) {
                            Side = 'left';
                            TimeSide = 'right';

                        }


                        var divChat = '<div class="direct-chat-msg ' + Side + '">' +
                            '<div class="direct-chat-info clearfix">' +
                            '<span class="direct-chat-name pull-' + Side + '">' + userName + '</span>' +
                            '<span class="direct-chat-timestamp pull-' + TimeSide + '"">' + time + '</span>' +
                            '</div>' +
                            ' <img class="direct-chat-img" src="' + userimg + '" alt="Message User Image">' +
                            ' <div class="direct-chat-text" >' + message + '</div> </div>';

                        $('#discussion').append(divChat);

                        var height = $('#discussion')[0].scrollHeight;

                         //Apply Slim Scroll Bar in Group Chat Box
                        $('#discussion').slimScroll({
                            height: height
                        });

                        ParseEmoji('#discussion');

                    }


                    function OpenPrivateChatBox(hub, userId, ctrId, userName) {

                        var PWClass = $('#PWCount').val();

                        if ($('#PWCount').val() == 'info')
                            PWClass = 'danger';
                        else if ($('#PWCount').val() == 'danger')
                            PWClass = 'warning';
                        else
                            PWClass = 'info';

                        $('#PWCount').val(PWClass);
                        var div1 = ' <div class="col-md-4"> <div  id="' + ctrId + '" class="box box-solid box-' + PWClass + ' direct-chat direct-chat-' + PWClass + '">' +
                            '<div class="box-header with-border">' +
                            ' <h2 class="box-title">' + userName + '</h2>' +

                            ' <div class="box-tools pull-right">' +
                            ' <span data-toggle="tooltip" id="MsgCountP" title="0 New Messages" class="badge bg-' + PWClass + '">0</span>' +
                            ' <button type="button" class="btn btn-box-tool" data-widget="collapse">' +
                            '    <i class="fa fa-minus"></i>' +
                            '  </button>' +
                            '  <button id="imgDelete" type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button></div></div>' +

                            ' <div class="box-body">' +
                            ' <div id="divMessage" class="direct-chat-messages">' +

                            ' </div>' +

                            '  </div>' +
                            '  <div class="box-footer">' +


                            '    <input type="text" id="txtPrivateMessage" name="message" placeholder="Type Message ..." class="form-control"  />' +

                            '  <div class="input-group">' +
                            '    <input type="text" name="message" placeholder="Type Message ..." class="form-control" style="visibility:hidden;" />' +
                            '   <span class="input-group-btn">' +
                            '          <input type="button" id="btnSendMessage" class="btn btn-' + PWClass + ' btn-flat" value="send" />' +
                            '   </span>' +


                            '  </div>' +

                            ' </div>' +
                            ' </div></div>';



                        var $div = $(div1);

                        // Closing Private Chat Box
                        $div.find('#imgDelete').click(function () {
                            $('#' + ctrId).remove();
                        });

                        // Send Button event in Private Chat
                        $div.find("#btnSendMessage").click(function () {

                            $textBox = $div.find("#txtPrivateMessage");

                            var msg = $textBox.val();
                            if (msg.length > 0) {
                                hub.server.sendPrivateMessage(userId, msg);
                                $textBox.val('');
                            }
                        });

                         //Text Box event on Enter Button
                                 $div.find("#txtPrivateMessage").keypress(function (e) {
                           if (e.which == 13) {
                               $div.find("#btnSendMessage").click();
                            }
                        });

                        // Clear Message Count on Mouse over
                        $div.find("#divMessage").mouseover(function () {

                            $("#MsgCountP").html('0');
                            $("#MsgCountP").attr("title", '0 New Messages');
                        });

                        // Append private chat div inside the main div
                        $('#PriChatDiv').append($div);
                        var msgTextbox = $div.find("#txtPrivateMessage");
                        $(msgTextbox).emojioneArea();
                    }




                    function ParseEmoji(div) {
                        var input = $(div).html();

                        var output = emojione.unicodeToImage(input);

                        $(div).html(output);
                    }






</script>


<!DOCTYPE html>
</head>
<body>


    <form id="form1" runat="server">

        <div class="content-wrapper">

            <header class="main-header" style="background: #222222 ;">
                <!-- Logo -->
                <div class="logo">
                    <!-- logo for regular state and mobile devices -->
                    <span class="logo-lg"><b>ForPlay</b> Chat App </span>
                </div>
                <!-- Header Navbar: style can be found in header.less -->
                <nav class="navbar navbar-static-top" role="navigation">
                    <!-- Sidebar toggle button-->
                    <img src="~/assets/icons/ForePlayLogo.png" style="max-height:50px; float:right;" />
                </nav>
            </header>

            <!--this div is connect to the checkbox Fitering data-->
            <center>
                <div class="form-group">
                    @Html.Label("Filter Users By Address")
                    @for (int i = 0; i < Model.FilteringChatBoxlist.Count; i++)
                     {

                          @Html.CheckBoxFor(m => Model.FilteringChatBoxlist[i].IsChecked)
                          @Html.HiddenFor(m => Model.FilteringChatBoxlist[i].filterId)
                          @Html.DisplayFor(m => Model.FilteringChatBoxlist[i].filterName)


                        }
                </div>
            </center>
            <div class="row">

我知道我需要计算当前用户与桌子上所有其他用户之间的距离,但是我不知道如何开始以及如何将所有这些连接在一起

0 个答案:

没有答案
相关问题