用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-08-26 00:20:39

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

使用plupload做一个类似qq邮箱附件上传的效果

公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可以添加多个附件,也可一个都不添加 以其中一个为例:(文件保存到了数据库中),有关plupload的内容可参考:http://www.360doc.com/content/14/0714/03/552866_394228686.shtml 首先是po package cn.com.plupload.p

iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview

需求: 类似QQ列表的头像加载刷新,判断在线离线状态改变头像,以及彩色头像灰色处理,下载图片+获取在线状态需要连网--再改变头像 问题:由于cell的复用以及下拉刷新数据每次加载10条数据,会出现头像赋值不正确,位置偏移大小不同的变化 原因:由于cell的重复调用,加载数据方法已经赋值方法也在重复的调用,所以头像加载 在线状态判断好后,网络延迟, (个人开始yy:启动时的cell和赋值结束的cell可能不是同一个) 修改:当cell开始调用的时候,给当前的cell赋tag值,加载结束判断是不是自

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

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

详解C# 网络编程系列:实现类似QQ的即时通信程序

引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在本专题中将利用前面专题介绍的知识来实现一个类似QQ的聊天程序.  一.即时通信系统 在我们的生活中经常使用即时通信的软件,我们经常接触到的有:QQ.阿里旺旺.MSN等等.这些都是属于即时通信(Instant Messenger,IM)软件,IM是指所有能够即时发送和接收互联网消息的软件. 在前面专题

WPF简单模拟QQ登录背景动画(转)

介绍 之所以说是简单模拟,是因为我不知道QQ登录背景动画是怎么实现的.这里是通过一些办法把它简化了,做成了类似的效果 效果图 大体思路 首先把背景看成是一个4行8列的点的阵距,X轴Y轴都是距离70.把点连起来,连成三角形.布局在外层蓝色的里,显示只显示里层绿色框里的部分.这样最外层的点不用动,只让绿框里面的点做随机运动就可以了.然后给三角形的Fill做颜色和时间都随机颜色动画,动画完成后再重新做颜色动画,循环. 在实现上,需要注意一下,每个点都对应多个三角形,要在生成三角形的时候,注册到点上,并

网站集成QQ登录功能

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

WPF简单模拟QQ登录背景动画

介绍 之所以说是简单模拟,是因为我不知道QQ登录背景动画是怎么实现的.这里是通过一些办法把它简化了,做成了类似的效果 效果图 大体思路 首先把背景看成是一个4行8列的点的阵距,X轴Y轴都是距离70.把点连起来,连成三角形.布局在外层蓝色的里,显示只显示里层绿色框里的部分.这样最外层的点不用动,只让绿框里面的点做随机运动就可以了.然后给三角形的Fill做颜色和时间都随机颜色动画,动画完成后再重新做颜色动画,循环. 在实现上,需要注意一下,每个点都对应多个三角形,要在生成三角形的时候,注册到点上,并

java如何在网站中接入qq登录功能

其实接入qq登录还是很简单的,但是你既然要做qq登录肯定你得网站要能够在外网访问的到, 因为qq在对你得网站授权之间会进行人工检查,检查你得图标摆放位置合不合理,网站是否违法等内容. 当你的网站能够在外网访问的时候 我们在qq开发者网站中申请网站的授权 用你的qq登录这个网站 http://connect.qq.com/ 在管理中心创建你的应用 创建应用的时候需要你填写一些网站的基本信息 如访问网址.登录成功后回调地址(也就是你处理登录请求的action) 腾讯会在request中封装qq验证后

C#实现类似QQ的隐藏浮动窗体、消息闪动

功能简介 当语音客服系统登录成功进入主界面时,本聊天工具将会自动隐藏在左下角位置,当鼠标移动到左下角时,自动弹出,当鼠标移开聊天窗体时,自动隐藏.如果想让聊天窗体固定在桌面,只要拖动一下聊天窗口,让它不停留在边界位置就可以了.隐藏和悬浮方式类型QQ. 1. 系统主界面 当点击最小化按钮时, 在电脑右下角会显示任务图标,点击任务图标,将会在左下角位置弹出. 主界面各部分介绍: a) 消息列表:该区域的功能主要是显示消息记录. b) 发送消息:输入要发送的消息进行发送,默认群聊,输入消息后,按回车键