//接收消息 private void GetMsgHandler(object sender, TalkContract talk) { PerMsg msg = new PerMsg(talk.SenderName, talk.Content); Chat chat = chats.Where(p => p.SenderId.Equals(talk.SenderId)).FirstOrDefault(); if (chat == null) { chat = new Chat { SenderId = talk.SenderId, SenderName = talk.SenderName, ReceiverId = talk.ReceiverId, Msgs = new MsgList() }; chat.Msgs.Add(msg); Dispatcher.Invoke(() => { chats.Add(chat); }); } else { Dispatcher.Invoke(() => { chat.Msgs.Add(msg); }); } }
//发送消息 private void btnSend_Click(object sender, RoutedEventArgs e) { string content = txtSend.Text.Trim(); PerMsg p = new PerMsg(UserName, content); Chat boxItem = (Chat)listChat.SelectedItem; boxItem.Msgs.Add(p); txtSend.Text = ""; TalkContract talk = new TalkContract(LocalId, UserName, boxItem.SenderId, content); helper.SendMessage(string.Format("TALK@{0}", DataHelpers.XMLSer <TalkContract>(talk))); }
public static void Save2WaitSending(TalkContract talk) { using (var model = new DataModel()) { model.waitforsendings.Add(new waitforsending { SendTime = DataHelpers.GetTimeStamp(), SenderId = talk.SenderId, ReceiverId = talk.ReceiverId, Msg = talk.Content }); model.SaveChanges(); } }
//发送消息 public void Talk2User(object sender, TalkContract talk) { var receiver = users.Where(p => p.UserId.Equals(talk.ReceiverId)).FirstOrDefault(); if (receiver == null) { //存入待发列表 CC.ServerHandle.Save2WaitSending(talk); } else { //发送给收信方 receiver.helper.SendMessage(string.Format("TALK@{0}", DataHelpers.XMLSer <TalkContract>(talk))); } }
public static event EventHandler <TalkContract> GetMsgHandler; //接收消息事件 public static void Handle(object sender, string data) { string[] d = Data_Init(data); switch (d[0]) { case "LOGINCALLBACK": try { LoginCallBack callBack = DataHelpers.DeXMLSer <LoginCallBack>(d[1]); if (LoginHandler != null) { LoginHandler(null, callBack); } } catch { break; } break; case "SIGNUPCALLBACK": try { SignUpCallBack callBack = DataHelpers.DeXMLSer <SignUpCallBack>(d[1]); if (SignupHandler != null) { SignupHandler(null, callBack); } } catch { break; } break; case "PRESENCEMSG": break; case "SEARCHCALLBACK": try { SearchCallBack callBack = DataHelpers.DeXMLSer <SearchCallBack>(d[1]); if (SearchHandler != null) { SearchHandler(null, callBack); } } catch { break; } break; case "ADDCALLBACK": User user = DataHelpers.DeXMLSer <User>(d[1]); if (UpdateFriendHandler != null) { UpdateFriendHandler(null, user); } break; case "ADDCONFIRM": try { AddConfirm confirm = DataHelpers.DeXMLSer <AddConfirm>(d[1]); if (AddComfirmHandler != null) { AddComfirmHandler(null, confirm); } } catch { break; } break; case "REMOVE": RemoveContract remove = null; try { remove = DataHelpers.DeXMLSer <RemoveContract>(d[1]); if (RemoveFriendHandler != null) { RemoveFriendHandler(null, remove); } } catch (Exception e) { throw e; } break; case "TALK": TalkContract talk = null; try { talk = DataHelpers.DeXMLSer <TalkContract>(d[1]); if (GetMsgHandler != null) { GetMsgHandler(null, talk); } } catch { break; } break; default: break; } }
public static void Handle(object sender, string data) { ServerHandle server = new ServerHandle(); IServerHandle ish = (IServerHandle)server; TCPHelper helper = (TCPHelper)sender; string[] d = Data_Init(data); switch (d[0]) { case "LOGIN": LoginContract login = null; try { login = WTalk.Helpers.DataHelpers.DeXMLSer <LoginContract>(d[1]); } catch { } LoginCallBack callBack = ish.Login(helper.tcpClient, login); if (ShowOnServerWindow != null) { if (callBack.LoginStatus == Status.Yes) { UserArgs args = new UserArgs { IP = helper.tcpClient.Client.RemoteEndPoint.ToString(), Id = login.UserId }; string log = string.Format("{0}-->Login Success", helper.tcpClient.Client.RemoteEndPoint.ToString()); ShowOnServerWindow(null, log); if (LoginHandler != null) { LoginHandler(null, args); } } else { string log = string.Format("{0}-->Login Fail", helper.tcpClient.Client.RemoteEndPoint.ToString()); ShowOnServerWindow(null, log); } } string msg = string.Format("LOGINCALLBACK@{0}", WTalk.Helpers.DataHelpers.XMLSer <LoginCallBack>(callBack)); helper.SendMessage(msg); break; case "SIGNUP": SignupContract signup = null; try { signup = DataHelpers.DeXMLSer <SignupContract>(d[1]); } catch { } SignUpCallBack signUpCallBack = ish.Signup(signup); if (ShowOnServerWindow != null) { string log = string.Format("{0}-->Signup:{1}", helper.tcpClient.Client.RemoteEndPoint.ToString(), signUpCallBack.MoreMsg); //if (callBack.LoginStatus == Status.Yes) //{ // string log = string.Format("{0}-->Signup", helper.tcpClient.Client.RemoteEndPoint.ToString()); // ShowOnServerWindow(null, log); //} //else //{ // string log = string.Format("{0}-->Login Fail", helper.tcpClient.Client.RemoteEndPoint.ToString()); // ShowOnServerWindow(null, log); //} ShowOnServerWindow(null, log); } helper.SendMessage(string.Format("SIGNUPCALLBACK@{0}", DataHelpers.XMLSer <SignUpCallBack>(signUpCallBack))); break; case "LOGOUT": //string logoutlog = string.Format("{0}-->登出", helper.tcpClient.Client.RemoteEndPoint.ToString()); //if(ShowOnServerWindow != null) //{ // ShowOnServerWindow(null, logoutlog); //} break; case "SEARCH": SearchContract search = null; try { search = DataHelpers.DeXMLSer <SearchContract>(d[1]); SearchCallBack back = ish.Search(search); helper.SendMessage(string.Format("SEARCHCALLBACK@{0}", DataHelpers.XMLSer <SearchCallBack>(back))); } catch { } break; case "ADD": AddContract add = null; try { add = DataHelpers.DeXMLSer <AddContract>(d[1]); AddComfirmArgs args = ish.Add(add); if (args.IP != "Offline") { AddHandler(null, args); } } catch { break; } break; case "REMOVE": RemoveContract remove = null; try { remove = DataHelpers.DeXMLSer <RemoveContract>(d[1]); ish.RemoveFriends(remove); if (RemoveFriendHandler != null) { RemoveFriendHandler(null, remove); } } catch (Exception e) { throw e; } break; case "TALK": TalkContract talk = new TalkContract(); try { talk = DataHelpers.DeXMLSer <TalkContract>(d[1]); if (TalkHandler != null) { TalkHandler(null, talk); } } catch { } break; case "ADDCONFIRMCALLBACK": AddConfirmCallBack accb = null; AddCallBack addCallBack = null; try { accb = DataHelpers.DeXMLSer <AddConfirmCallBack>(d[1]); addCallBack = ish.AddComfirm(accb); if (UpdateFriendListHandler != null) { UpdateFriendListHandler(null, addCallBack); } } catch { break; } break; default: break; } }