我的第一个Socket程序-SuperSocket使用入门(二)

我的第一个Socket程序-SuperSocket使用入门(二)操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操辛辛苦苦写那么久的博客,最后手贱点了全屏富文本编辑器找上传附件的按钮,结果整个页面都卡死了,只能关掉再打开看自动保存的,尼玛的,就一个div显示内容,都

大家好,欢迎来到IT知识分享网。

操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操

辛辛苦苦写那么久的博客,最后手贱点了全屏富文本编辑器找上传附件的按钮,结果整个页面都卡死了,只能关掉再打开看自动保存的,尼玛的,就一个div显示内容,都找不到按钮来还原,麻痹麻痹麻痹麻痹麻痹,这恶心的IE,没心情写了,后面的是手动F12从dom中拷出来的代码,最后直接发个百度网盘的连接吧,这个富文本编辑器都没看到上传附件的按钮

接下来看下线程里的操作:

/// <summary> /// 异步线程发送信息 /// </summary> public class ThreadSendMsg { public void DoWork() { while (true) { try { List<MsgEntity> list = GlobalWeChatMsgList.GetList(); for (int i = 0; i < list.Count; i++) { var session = list[i].session; if (session != null) { var session_client = session.AppServer.GetAllSessions(); var client = session_client.Where(c => c.SN == list[i].sn); if (client != null) { foreach (var item in client) { item.Send(list[i].msg + " " + list[i].guid.ToString() + " " + list[i].open_id + "$"); } } } } } catch (Exception ex) { LogHelper.WriteLog("线程循环出错:" + ex.Message + "------------" + DateTime.Now.ToString()); } //线程睡眠1秒 System.Threading.Thread.Sleep(2000); } } }

上面有一句:if (client != null)  ,这里从所有的session查找sn=列表中的那个,并判断这个连接是否还在线,如果在则发送,不在则消息还存在待发送的列表中 上面我们向安卓客户端发出去了消息,什么时候我们来把这条消息从待发送列表中删掉呢?不然安卓客户端就会不停的收到这条消息,这就需要安卓客户端主动告诉我们已经收到了这条消息我们新加一个命令:

/// <summary> /// 客户端来这里确认收到消息 /// </summary> public class IGET : CommandBase<WeChatSession, StringRequestInfo> { public override void ExecuteCommand(WeChatSession session, StringRequestInfo requestInfo) { if (requestInfo.Parameters.Count() != 1) { session.Send("error parameters\r\n"); return; } string key = requestInfo.Parameters[0]; if (string.IsNullOrWhiteSpace(key)) { session.Send("guid is null\r\n"); return; } if (key.Substring(key.Length - 1, 1) != "$") { session.Send("error guid\r\n"); return; } try { Guid guid = new Guid(key.Substring(0, key.Length - 1)); GlobalWeChatMsgList.RemoveMsg(guid); session.Send("success\r\n"); } catch { session.Send("not validate guid\r\n"); } } }

基本功能这里都已经好了,还有一个是客户端连接的心跳,客户端怎么知道当前与socket服务器连接正常?所以再加一个命令处理类:

 public class XT : CommandBase<WeChatSession, StringRequestInfo> { public override void ExecuteCommand(WeChatSession session, StringRequestInfo requestInfo) { if (requestInfo.Parameters.Count() == 1) { if (requestInfo.Parameters[0] == "&") { if (!session.isLogin|| string.IsNullOrWhiteSpace(session.SN)) session.Send("no check\r\n"); else session.Send("$\r\n"); } } } }

这个心跳的消息通讯很简单,他发一个&字符,服务器响应一个$符号,这里再重申一下,服务器与客户端的通讯信息结尾都是以\r\n结束。

———————————————————————————- End ———————————————————————————————————

源码:http://pan.baidu.com/s/1bntsF3x

又看了一下仅剩的博客,妈蛋的,丢了一大半,这篇已经没法看了,直接下源码看吧,操操操操操操操操操操操操操

我的第一个Socket程序-SuperSocket使用入门(二)

 

 

 


 

                                  2016-06-06更新

  今天闲来无事,又看了一下SuperSocket,本来想把这篇残缺的博客补一补,但是官方文档已经写的那么详细了,我觉得就没必要再赘述了,就这样吧

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27576.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信