Silverlight+WCF双工通信开发聊天室精简版服务器端代码

Silverlight+WCF双工通信开发聊天室精简版服务器端代码,第1张

概述一.创建WCF应用程序        接口文件:   [ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IDuplexClient))]       public interface IDuplexService       {            /// 

一.创建WCF应用程序

       接口文件:

 

  [ServiceContract(namespace = "Silverlight", CallbackContract = typeof(IDuplexClIEnt))]          public interface IDuplexService          {               /// <summary>              /// 登陆的时候调用              /// </summary>              /// <param name="name">名字</param>              /// <param name="quantity">ID</param>              [OperationContract(IsOneWay = true)]              voID Login(string name, int ID);              /// <summary>              /// 发送消息              /// </summary>              /// <param name="message">消息内容</param>              /// <param name="ID">大于0为私聊</param>              /// <param name="ID">自己的ID</param>              [OperationContract(IsOneWay = true)]              voID Say(string message, int ID,int uID);          }                                   ///客服端调用               //[ServiceContract]          public interface IDuplexClIEnt          {                    //返回登陆人员               [OperationContract(IsOneWay = true)]              voID rFrIEndList(List<UserInfo> frIEndList);              /// <summary>              /// 系统消息              /// </summary>              /// <param name="message">返回消息</param>              /// <param name="type">0代表异地登陆,-1代表用户异常,-2用户上线,-3用户下线</param>              [OperationContract(IsOneWay = true)]              voID rSysMessage(string message, int type,int ID);          }           //封装要传送的数据            [DataContract]          public class UserInfo          {              public UserInfo(string name,int ID)              {                  _ID = ID;                  _name = name;              }              [DataMember]             public  int _ID { getset; }              [DataMember]             public   string _name { getset; }          }    

 二. 实现接口

 

  public class OrderService : IDuplexService          {              IDuplexClIEnt clIEnt = OperationContext.Current.GetCallbackChannel<IDuplexClIEnt>();//构建用户通道              List<UserInfo> lst = new List<UserInfo>();//存放登录用户              private static Dictionary<IDuplexClIEnt, UserInfo> onlineUser = new Dictionary<IDuplexClIEnt, UserInfo>();//用每个用户通道和用户信息组成字典存储当前用户列表                            #region IDuplexService 成员                        public voID Login(string name, int ID)              {                  //判断是否已经登陆                       if (onlineUser.Values.Where(h => h._name == name).Count() > 0)                  {                      IDuplexClIEnt repertClIEnt = onlineUser.Where(f => f.Value._name == name).First().Key;                      //返回给此客户端重复登陆信息,强迫其下线                      onlineUser.Remove(repertClIEnt);                      repertClIEnt.rSysMessage("帐号在异地登录,被迫下线。", -1,0);                      //通知好友你上线了                      foreach (var ou in onlineUser)                      {                          ou.Key.rSysMessage(name + ":下线了", -3, ID);//回调接收方                      }                      }                  loginChat(name, ID);                   }                   public voID Say(string message,int uID)              {                  IDuplexClIEnt clIEnt = null;                  if (ID == 0)//群聊                        {                      foreach (var ou in onlineUser)                      {                          ou.Key.rSysMessage(message, ID, uID);//回调接收方                      }                  }                  else                 {                      clIEnt = channel(ID);//获取接收方通道                           if (clIEnt != null)//如果接收方在线                      {                          clIEnt.rSysMessage(message, uID);//回调接收方                      }                  }              }                   #endregion              public voID loginChat(string username, int ID)//登陆聊天模块              {                  lst.Add(new UserInfo(username, ID));                       clIEnt.rFrIEndList(lst);//返回好友列表                  //通知好友你上线了                  foreach (var ou in onlineUser)                  {                       ou.Key.rSysMessage(username + ":上线了", -2, ID);//回调接收方                  }                      onlineUser.Add(clIEnt, new UserInfo(username, ID));//新用户添加到在线用户列表              }              private IDuplexClIEnt channel(int ID)//获取通道              {                  IDuplexClIEnt clIEnt = null;                  //确定接收人在线                  if (onlineUser.Values.Where(f => f._ID == ID).Count() > 0)                  {                      return onlineUser.Where(f => f.Value._ID == ID).First().Key;//找到此通道                  }                  return clIEnt;              }          }    

 

参考文献:http://codeadmin.blog.163.com/blog/static/1158046532011626111624369/

总结

以上是内存溢出为你收集整理的Silverlight+WCF双工通信开发聊天室精简版服务器端代码全部内容,希望文章能够帮你解决Silverlight+WCF双工通信开发聊天室精简版服务器端代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1015237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存