用SignalR做类似QQ登录的应用

原文:用SignalR做类似QQ登录的应用

首先通过NuGet下载signalr包

 

在工程下新建一个类,继承Hub

    public class DemoHub:Hub
    {
        public class Users
        {
            public string ConnectionId { get; set; }
            public string Name { get; set; }

            public string SId { get; set; }
        }

        //在线表
        static List<Users> Connecteds = new List<Users>();
        //验证
        public void CheckedOnline(string name, string sid)
        {
            var id = Context.ConnectionId;
            if (string.IsNullOrEmpty(name)||string.IsNullOrEmpty(sid))
            {
                Clients.Client(id).onExist("登录出错!");
            }
            if (Connecteds.Count(x=>x.Name==name)==0)
            {
                Connecteds.Add(new Users() { ConnectionId = id, Name = name, SId = sid });
            }
            else if(Connecteds.Count(x=>x.SId==sid)==0)
            {
                var oID = Connecteds.Find(x => x.Name == name).ConnectionId;
                Clients.Client(id).onExist("被登录");

                var mod = Connecteds.FirstOrDefault(x => x.Name == name);
                Connecteds.Remove(mod);

                Connecteds.Add(new Users() { ConnectionId = id, Name = name, SId = sid });
            }
            else if (Connecteds.Count(x=>x.SId==sid)==0)
            {
                 Clients.Client(id).onExist("重复登录");
                 var mod = Connecteds.FirstOrDefault(x => x.Name == name);
                 Connecteds.Remove(mod);
            }
        }

        //断开
        public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
        {
            var mod = Connecteds.FirstOrDefault(x=>x.ConnectionId==Context.ConnectionId);
            if (mod!=null)
            {
                Connecteds.Remove(mod);
            }
            return base.OnDisconnected(stopCalled);
        }

        //重连
        public override System.Threading.Tasks.Task OnReconnected()
        {
            return base.OnReconnected();
        }
    }

页面

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
    <script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>

    <script type="text/javascript">
        var hub = $.connection.demoHub;
        $(function () {
            //start
            $.connection.hub.start().done(function () {

                hub.server.CheckedOnline("@ViewBag.Name","@ViewBag.sid");
            });

            hub.client.onExist = function (msg) {
                alert(msg);

            }
            //onReconnected
            hub.client.onReconnected = function () {
                hub = $.connection.demoHub;
                $.connection.hub.start().done(function () {

                    hub.server.CheckedOnline("@ViewBag.Name", "@ViewBag.sid");
                });
            }
        });
    </script>

好了基本完成,就差一个提示后退出。

菜鸟第一次发文写程序,对于程序的不足欢迎探讨。

时间: 2024-09-30 08:30:19

用SignalR做类似QQ登录的应用的相关文章

JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)_java

JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)的实现思路如下所示: 一.该功能有什么作用 大家想想吧.反正总会有这样的需求的.这年头什么需求不会有..呵呵.有时候也不一定是需求,很有可能为了安全也会这么做.例如考试系统,在线聊天系统,很有必要做成这样的吧. 二.实现过程 a.问题分析 在系统中,我们一般都是把登录信息绑定到session中,看来从这入手是可能找到解决办法.说白了,也就是当用户登录时,判断一下这个用户有没有登录,如果登录了,就把以前的那个session清除

想用C#做类似QQ的企业IM通讯工具,需要什么知识储备,读哪方面的书

问题描述 烦请大侠推荐入门书籍~ 解决方案 解决方案二: 解决方案三:Socket和winForm其实直接在网上找个demo就好了解决方案四:看你服务端端详怎么做,是基于socket还是给予service的如果是基于socket那么socket这块知识是必备的(,后者找个socket通信框架了解下如果基于service的可以学习下WCF等解决方案五:界面:WPF通信:WCF其他框架知识,设计模式之类也需要了解其他的就是编程中遇到的小问题需要一些零散的知识处理,现成google就好了.解决方案六:

winform-Winform做的东西怎么实现QQ登录啊?有官方的SDK吗?

问题描述 Winform做的东西怎么实现QQ登录啊?有官方的SDK吗? 求大神赐教啊!就是用Winform做一个QQ登录?我看别人有实现的...不知道怎么弄! 解决方案 一般都是用的webqq协议 工具:浏览器F12开发人员工具,IE9以前的可以用httpwatch 流程: 1.打开抓包工具,进行正常的登录,获取资料,发送接收消息 2.在进行第一步的时候,你的工具就可以检测到浏览器的http请求 3.对http请求进行分析 4.使用 httpwebrequest 对http请求进行模拟 webq

C#实现的QQ登录器

前几天看到一篇文章说通过DOS命令就可以登陆QQ,在运行里试了一下,真的可以 代码如下: Code [copy to clipboard] CODE: QQ路径 /start QQUIN:QQ号 PWDHASH:经过MD5和BASE64双充加密的QQ密码 /stat:登陆类型 今天就想做个QQ登录器试一下,信息保存尝试使用了序列化,发现功能真的太强大了,刚才整理了一下,现在完工,里面做了大量的注释,放出代码,文章最下面有打包的下载: QQLoginForm.cs窗体 Code [copy to

android开发-Android,类似qq账号在另一台手机设备登录了,强迫当前账号下线

问题描述 Android,类似qq账号在另一台手机设备登录了,强迫当前账号下线 如题,怎么实现这个功能.网上查了些资料-有人说用推送,判断Token-有人说uuid什么的-还有说禁用接口的,我也看混乱了-我没一个思路.菜鸟程序猿求师兄师姐们教教一个思路,这过程怎么实现的-最好有个demo.我的邮箱是nerermore1024@sina.com.真心求教,良辰必有不少于500字的感谢信-- 解决方案 http://blog.csdn.net/yyywyr/article/details/38615

区域-我成功做了个类似 QQ 截屏 的功能,但是只能往右下角拉框

问题描述 我成功做了个类似 QQ 截屏 的功能,但是只能往右下角拉框 具体描述:QQ截屏的效果是,当前屏幕定格,然后自由选择截屏区域.我用一个max的Form承载了当前屏幕的图像,然后在这个Form上用鼠标MouseDown ,Move,Up实现了自由选择截图框大小的功能,对象是一个PictureBox.结果问题出现了.PictureBox只能从第一个选取点往右下角拉框,无法做到自由的选框.鄙人学识浅薄,还求有心人帮忙,是否有优化方案或者替代方案. 初步想法是:更换pictureBox,用其它可

网站集成QQ登录功能(转)

最近在做一个项目时,客户要求网站能够集成QQ登录的功能,以前没做过这方面的开发,于是去QQ的开放平台官网研究了一下相关资料,经过自己的艰苦探索,终于实现了集成QQ登录的功能,现在把相关的开发经验总结一下,希望对有这方面需求的朋友有所帮助. 一.前期准备 首先你需要登录QQ的开发平台注册一个账号,QQ互联平台官方地址:http://connect.qq.com/ 进去后注册一个开发账号,完了登录后台会有类似如下的一个后台,填好相关信息,具体可以参考下图.最后我们会有一个APP ID和APP KEY

网站集成QQ登录功能

原文:网站集成QQ登录功能 最近在做一个项目时,客户要求网站能够集成QQ登录的功能,以前没做过这方面的开发,于是去QQ的开放平台官网研究了一下相关资料,经过自己的艰苦探索,终于实现了集成QQ登录的功能,现在把相关的开发经验总结一下,希望对有这方面需求的朋友有所帮助. 一.前期准备 首先你需要登录QQ的开发平台注册一个账号,QQ互联平台官方地址:http://connect.qq.com/ 进去后注册一个开发账号,完了登录后台会有类似如下的一个后台,填好相关信息,具体可以参考下图.最后我们会有一个

QQ 登录过程演示工具

花了一点精力,做了如下 QQ2010 版本的登录过程演示工具,主要是用于演示如何截取用户登录时的输入.此工具的原理比较基本,主要是利用全局钩子截获用户的输入.主要是演示作用,因此我又做了一个很直观的界面,可以看到截获输入的过程.其用户界面如下所示:     此图中左侧是我做的工具(由于我对腾讯灌输的价值观一向鄙视,所以QQ的LOGO被我替换成了"狗日的腾讯"图标),右侧是真正的QQ2010 SP1(1760)的登录对话框.当用户在QQ的登录对话框进行登录时,其输入将会从我的工具上直观的