`
pwk907cx
  • 浏览: 11565 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

PowerTalkBox和飞信结合搞定在线客户端(.net)

 
阅读更多

PowerTalkBox和飞信结合搞定在线客户端(.net)
2010年11月20日
  一个礼拜了,都在搞这个在线客户端,差点没崩溃,最终还是搞定了,嘿嘿,在此感谢一下那些帮助我的同学、朋友、老师、网友,嘿嘿,要不还不知道啥时候才能搞定呢.......
  这玩意其实说通了也就两个飞信号在那对发信息,即Web(用PowerTalkBox)--服务端(使用飞信的sdk,这里用一个飞信号)--飞信客户端(这是我们的客服号),基本思路是:用户在Web端发送一条消息,通过socket发送给服务端,服务端接收完成到信息后,将该信息通过飞信的sdk转发给客服,客服回复信息,发送到服务端,服务端利用飞信sdk收到消息,调用一个根据PowerTalkBox写的服务,将消息加入到PowerTalkBox的对话列表中,这样web端就直接将这条消息调出来,客户就可以看到了,哈
  客户端那边是用web实现的,以前有看过那个PowerTalkBox,带源码,觉得还不错,这次决定还是用这个进行二次开发,改改,哈哈
  首先要搞定的就是服务端调用飞信sdk和飞信客户端通讯,刚开始不懂飞信的sdk怎么用,后面网上找了一下,结果找到的都是php的,哎!看来不行,得自己写,呵呵,找了一些帮助文档,恩,相对来说还是比较简单的,玩了一下,服务端可以和飞信的客户端通讯了......,把飞信的sdk一些基本的东西贴出来....,嘿嘿
  /// 
  /// 登陆飞信
  /// 
  private bool FetionLogin(string userName,string pwd)
  {
  sdk.AccountManager.FillUserIdAndPassword(userName, pwd, false);//第三个参数为是否自动登陆
  bool isOk=sdk.AccountManager.Login();//登陆            
  return isOk;
  }
  /// 
  /// 发送消息
  /// 
  private void SendFetionMsg(string userName, string msg)
  {       
  //userName为对方的飞信号,msg为要发送的信息
  sdk.ContactControl.SendIM.SendIM(userName, msg);   
  }
  /// 
  /// 发送手机消息
  /// 
  private void SendFetionMobileMsg(string userName, string msg)
  { 
  //userName为对方的飞信号,msg为要发送的信息
  sdk.ContactControl.SendSMS.SendSMS(userName, msg);
  }
  /// 
  /// 加载好友列表
  /// 
  /// 飞信sdk对象
  /// 返回飞信好友信息集合
  private List GetFetionFriendList(FetionSDK psSdk)
  {
  List fetionFriends = new List();
  try
  {
  List list = psSdk.ContactControl.getAllContactList();
  for (int i = 0; i (); }
  return fetionFriends;
  }
  /// 
  /// 飞信sdk出现错误
  /// 
  private void Sdk_SDK_Error(object sender, NullStudio.Fetion_SDK.Event.SDK_ErrorEventArgs fe)
  {
  }
  /// 
  /// 当前飞信号状态
  /// 
  private void Sdk_SDK_UserSatusChange(object sender, Imps.Client.Core.UserSatusChangedEventArgs e)
  {
  switch (e.NewStatus.ToString())
  {
  case "Disconnected"://断开了网络
  FetionLogin(userName, userPwd);//重新登陆
  break;
  case "Initialized"://已初始化
  break;
  case "Loginning"://登陆中
  break;
  case "Logon"://已登陆
  sdk.AccountManager.CurrentUser.Presence.AsyncChang eMainPresence(Imps.Common.MainPresence.Online, Imps.Common.MainPresence.Online.ToString());//设置PC在线
  break;
  case "Logoff"://离开网络
  break;
  case "Logouting"://注销中
  break;
  case "None"://无状态
  break;
  case "OfflineLogon"://离线
  break;
  case "StandBy"://待机
  break;
  case "WaitReconnect"://等待
  break;
  }      
  }
  /// 
  /// 接收到的消息
  /// 
  private void sdk_SDK_ReceiveMessage(object sender, NullStudio.Fetion_SDK.Event.SDK_ReceiveMessageEven tArgs fe)
  {
  //fe.Message为接收到的消息
  }
  恩,单这些就可以实现服务器跟客户端通讯的功能了.....
  接下去就要搞定web和服务端之间的通讯了,这块比较变态点....,在Powertalkbox有接收消息和发送消息的事件刚开始看到的时候,高兴得要死,结果进去一看,只有接收消息的时候,在事件里能获取消息,发送消息获取不到....,悲剧了....,哎!没办法,只能去研究一下PowerTalkBox的发送事件怎么写了,后面看着看着实在不知道该怎么在那发送事件里重写sendevent,火大,直接在事件中弄一个全局静态变量,嘿嘿,这样在外面就可以调用了....,哈,这样就可以从web通过socket发送消息给服务端了。
  服务端发送消息给web这个刚开始有点晕,后面干脆就直接去看PowerTalkBox是怎么发送消息的,结果发现那边消息都是全部存到一个list中,嘿嘿,这样就好办了,在PowerTalkBox那边做一个将消息添加到list中的服务,然后在服务端接收飞信消息的那事件中调用一下这个服务,将消息传入list中,嘿嘿,web那边就直接自动将消息显示出来了.....这样就搞定了,哈
  感觉web这边用socket发送消息给服务端好像不太好.....,具体怎么个不好法说不大清楚....,嘿嘿,有什么好思路大家共享一下哈,嘿嘿
  后记:在服务端这边还有一个小的问题,就是服务端这边飞信登录成功后差不多10分钟,就会掉线,我现在是做一个线程,每隔三分钟重新登录一下飞信,原本是做成改变一下状态的,不过还是不行,这样有时消息会丢失。后面发现好像可以使用一个什么移动的心跳包,在服务端每隔一段时间给移动那边发送一个包,这样就不会掉线了,嘿嘿,这个还值得研究研究
  后面早上又做了一个监控网站的,如果网站不能浏览就发送短信给站长......,嘿嘿,上面的那些搞定了,其实这个也没什么了,哈,最主要是这里发送短信是直接发送到自己的手机上,嘿嘿,就是在发送消息的时候使用下面这方法:
  //第一个参数直接这个,是给自己发送手机消息的意思,msg是要发送的内容
  sdk.ContactControl.SendSMS.SendSMS(sdk.ContactCont rol.getMyself().Uri.Id,msg);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics