基于Tcp通信的聊天程序微风IM(c#开源) -技术分析(三) 客户端下线

在微风IM中,当某个客户端下线后,其他客户端能够感知到此用户已经下线,并把其头像图标变成灰色。

感知连接的掉线,是networkcomms框架内置的功能,服务器通过心跳检测得知某连接掉线,会从networkcomms内部维护的连接列表中删除此连接,并触发相应的委托。

我们要处理某连接掉线,只需要注册  NetworkComms.AppendGlobalConnectionCloseHandler 方法即可

服务器端代码如下:

  //如果某客户端离线,触发此方法
            NetworkComms.AppendGlobalConnectionCloseHandler(HandleConnectionClosed);

客户端某用户离线的处理方法

  //处理某可客户端离线情况
        private void HandleConnectionClosed(Connection connection)
        {
            try
            {

                var tempUserID = "";

                lock (syncLocker)
                {
                    //在用户字典中找到网络连接相对应的用户ID
                    foreach (var kv in userManager)
                    {
                        //如果要关闭的网络连接,与某个用户的网络连接相同,则找出此用户
                        if (kv.Value == connection.ConnectionInfo.NetworkIdentifier)
                        {
                            tempUserID = kv.Key;
                            break;
                        }
                    }

                    if (tempUserID != "")
                    {
                        //如果找到的用户ID不为空,则从用户字典中删除此项
                        if (userManager.ContainsKey(tempUserID))
                        {
                            //连接关闭时,从用户管理器中删除该用户
                            userManager.Remove(tempUserID);
                        }
                    }
                }

                //发送通知给其他客户端,告知其某个用户下线
                if (tempUserID != "")
                {

                    UserStateNotify(tempUserID, false);
                }
                //应该发送一个消息给所有在线的其他用户
            }
            catch (Exception ex)
            {
                LogTools.LogException(ex, "NetworkComms_ConnectionClosed");
            }
        }

www.networkcomms.cn

www.cnblogs.com/networkcomms

时间: 2024-10-21 01:54:46

基于Tcp通信的聊天程序微风IM(c#开源) -技术分析(三) 客户端下线的相关文章

基于Tcp通信的聊天程序微风IM(c#开源) -技术分析(一) 用户管理

在微风IM中,如果用户上线了,其他用户的用户列表中,此用户状态更新为上线状态,如果用户下线了,此用户的头像会变成灰色. 我们看一下相关的代码: 首先是客户端代码(1): UserInfo userInfo = new UserInfo(); userInfo.UserID = txtUserID.Text.Trim(); userInfo.Password = txtPassword.Text.Trim(); //发送契约类给服务器端,并获取返回的结果 UserLoginContract log

c#编写的基于TCP通信的微风IM 版本3 新年新UI

在微风 IM 版本2中我们实现了局域网内的p2p通信,具体见: [开源下载]c#编写的聊天程序微风IM 版本2 增加局域网P2P通信 前面有朋友说微风IM的UI有点朴素,也确实,于是到网上去淘了件新衣服. 新的UI来自于网上开源程序,由"翱翔的雄鹰"老师编写的完全开源的QQ2010.(c# WinForm).新的UI中有许多自定义控件,我从其中学到了很多Winfrom控件制作的知识. 比如,带边框的文本框  文本框 鼠标经过时,显示边框的按钮  按钮 鼠标经过时显示边框效果的Check

基于TCP通信的套接字

基于tcp通信的套接字必须先启动服务器再去启动客户端去链接服务器 客户端 服务端 这只是基于tcp通信的一个简单的套接字  只能进行一次的通信 服务端                                                                                                 客户端 这是能多次通信的套接字 在阻塞前添加一个循环就能实现一个链接循环 服务端 客户端 这是模拟ssh实现远程执行命令 粘包问题 二.两种情况下会发生粘包

基于TCP的字符串传输程序

---恢复内容开始--- LINUX中的网络编程是通过SOCKET接口来进行的. Socket(套接字) Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了.Socket的定义类似于文件句柄的定义.下面的流程图大概描述了基于TCP协议的网络编程过程.同学们只需要对大概流程有一个初步认识即可,暂时不必深究每个函数的意义.因为在后面的实训子任务中,每一个函数的具体内容和使用方法都会讲到. TCP协议socket流程图 基本套接字

第二十五、二十六天:基于UDP的网路聊天程序

连续四天学习套接字的编程,可见套接字的重要性了.基于TCP和UDP分别写了两个程序.一是利用TCP实现一个服务器对多个客户端,客户端你发送信息,服务器就从事先准备好的五个字符串中随机回复一条.另一个是利用UDP实现两个人的对话,对话时可以是多个信息同时输入. 先是第一个程序.要实现一对多,就要使用线程编程,服务器端在不断监听中,如果有连接请求的话,就用通过accept函数接受并创建一个线程来处理.线程的创建函数为int pthread_create(pthread_t * thread, pth

java总用Socket 基于tcp通信模拟

/* * 基于TCP协议的socket通信,实现用户登录 */ public class ServerMain1 { public static void main(String[] args) { try { //1.创建一个服务器端的Socket,ServerSocket ,指定绑定的端口,并监听此端口 ServerSocket serverSocket=new ServerSocket(8888);//端口已设置1023以后的端口 //2.调用accept()方法开始监听,等待客户端连接

【开源下载】c#编写的聊天程序微风IM 版本2 增加局域网P2P通信

新年第一天 恭祝大家新年快乐 一直有朋友问P2P相关的问题,最近有时间在微风IM的基础上,实现了P2P通信,共享给大家,希望大家批评指正. 源码下载 (只包含源码,无插入式广告:)  数据库下载   数据库与第一版相同没有变化 我们知道在网络通信中,如果所有的通信都通过服务器转发,会增加服务器的负担,如果实现了P2P,客户端之间直接通讯,比如聊天或者传送文件时不再通过服务器,而是客户端之间直接通信,将会有效的减轻服务器的负担,提高程序的效率. 本节相关的P2P,指的是通过TCP协议,在局域网中实

【c#源码】基于TCP通信的客户端断线重连

源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接 本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本) 先看一下效果 初始状态: 当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息 然后,我们设定为每隔5秒重连一次,可以自定义设置重连的次数,比如说重连50次,如果还没有重连成功,则放弃重连 然后我们重新启动服务器端

基于TCP通信的客户端断线重连

转载:http://www.cnblogs.com/networkcomms/p/4304362.html 源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接 本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本) 先看一下效果 初始状态: 当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息 然后,我们设定为每隔5秒重