public void AddMessage(string orderNumber, string BelongFactory, string userName, string content, myAsynResult asyncResult) { try { string key = orderNumber + ":" + userName; //当传入的内容为"-1"时,表示为建立连接请求,即为了维持一个从客户端到服务器的连接而建立的连接 //此时将该连接保存到 List<myAsynResult> clients中,待再有消息发送过来时,该连接将会被遍历,并且会将该连接输出内容后,结束该连接 if (content == "-1") { if (dicUser.ContainsKey(key)) { dicUser[key] = asyncResult; } else { dicUser.Add(key, asyncResult); } } else { //将当前请求的内容输出到客户端 asyncResult.Content = ""; asyncResult.Send(null); string CurrentDateTime = DateTime.Now.ToString(); string lastModifyDate = ConvertDateTimeInt(DateTime.Parse(CurrentDateTime)); content = content.Replace("\n", ""); content = content.Replace("\r\n", ""); CacheHelper.InsertIdentify(orderNumber, CurrentDateTime.ToString() + "|" + userName + "|" + content, BelongFactory); //否则将遍历所有已缓存的client,并将当前内容输出到客户端 foreach (string keys in dicUser.Keys) { if (keys.IndexOf(orderNumber) > -1) { try { dicUser[keys].Content = lastModifyDate + "|" + userName + ":" + content; dicUser[keys].Send(null); } catch { } } } //清空所有缓存 clients.Clear(); } } catch (Exception ex) { } }
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { //myAsynResult为实现了IAsyncResult接口的类,当不调用cb的回调函数时,该请求不会返回到给客户端,会一直处于连接状态 string localUserName = WebUtils.GetCookieUser(); //当前登录用户 string getUser=context.Request["username"]; //发送的人 string[] userName = getUser !=null ? getUser.Split(',') : null; myAsynResult asyncResult = new myAsynResult(context, cb, extraData,localUserName ); String content = context.Request.Params["content"]; //向Message类中添加该消息 Messages.Instance().AddMessage(content, asyncResult,userName); return asyncResult; }
public void AddMessage(string content,myAsynResult asyncResult,string[] userName) { //当传入的内容为"-1"时,表示为建立连接请求,即为了维持一个从客户端到服务器的连接而建立的连接 //此时将该连接保存到 List<myAsynResult> clients中,待再有消息发送过来时,该连接将会被遍历,并且会将该连接输出内容后,结束该连接 if (content=="-1") { clients.Add(asyncResult); } else { //将当前请求的内容输出到客户端 //asyncResult.Content = content; //asyncResult.Send(null); //否则将遍历所有已缓存的client,并将当前内容输出到客户端 foreach (myAsynResult result in clients) { int h=0; foreach (string u in userName) { if (result.userName == u) { h=1; break; } } if (h== 1) { h=0; result.Content = content; result.Send(null); } else { result.Content = "false#@!"; result.Send(null); } } //清空所有缓存 clients.Clear(); } }
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { try { // http://localhost:58826/App_Code/AsnyHandler.cs //myAsynResult为实现了IAsyncResult接口的类,当不调用cb的回调函数时,该请求不会返回到给客户端,会一直处于连接状态 myAsynResult asyncResult = new myAsynResult(context, cb, extraData); String userName = context.Request.Params["userName"]; String orderNumber = context.Request.Params["orderNumber"]; String content = context.Request.Params["content"]; String BelongFactory = context.Request.Params["BelongFactory"]; //context.Session["BelongFactory"] = BelongFactory; //向Message类中添加该消息 Messages.Instance().AddMessage(orderNumber, BelongFactory, userName, content, asyncResult); return(asyncResult); } catch (Exception ex) { return(null); } }