void Login() { chat.Message login = new chat.Message.Builder() { MsgType = chat.MSG.Login_Request, Sequence = session.Sequence, Request = new chat.Request.Builder() { Login = new chat.LoginRequest.Builder() { Username = pb.ByteString.CopyFromUtf8(username.Text) }.Build() }.Build() }.Build(); Transaction<chat.Message>.AddRequest(login.Sequence, (chat.Message rsp_msg) => { if (rsp_msg.HasResponse && rsp_msg.Response.HasResult && rsp_msg.Response.Result) { session.SessionId = rsp_msg.SessionId; this.login.IsEnabled = false; this.logout.IsEnabled = true; GetFriends(); } }); session.SendMessage(login); }
void GetFriends() { chat.Message msg = new chat.Message.Builder() { MsgType = chat.MSG.Get_Friends_Request, Sequence = session.Sequence, SessionId = session.SessionId, }.Build(); Transaction<chat.Message>.AddRequest(msg.Sequence, (chat.Message rsp_msg) => { if( rsp_msg.HasResponse && rsp_msg.Response.HasGetFriends ) { var get_friends = rsp_msg.Response.GetFriends; foreach( var friend in get_friends.FriendsList ) { my_friends.Add(friend.Name.ToStringUtf8()); } } }); session.SendMessage(msg); }
/// <summary> /// 不停获取屏幕的图像bytes /// </summary> public static void startGetScreenJpgBytes() { #region while (true) { lock (IsLockGetJpgBytes) { try { JpgBytes = BMPScreen.getJpgByte(BMPScreen.getScreen()); chat.Message screennotify = new chat.Message.Builder() { MsgType = chat.MSG.Screen_Notification, Sequence = 0xffffffff, Notification = new Notification.Builder() { Screen = new ScreenNotification.Builder() { FileBytes = pb.ByteString.CopyFrom(BMPScreen.JpgBytes) }.Build() }.Build() }.Build(); Users.instance().forall((User otherUser) => { otherUser.SendMessage(screennotify); }); } catch (Exception e) { Console.WriteLine(e); } } Thread.Sleep(1000); } #endregion }
void OnReadBody(IAsyncResult ar) { try { int len = connection_.Client.EndReceive(ar); body_read_len += len; if (body_read_len < body.Length) { connection_.Client.BeginReceive(body, body_read_len, body.Length - body_read_len, 0, new AsyncCallback(OnReadBody), null); return; } StartReadHead(); try { chat.Message recv_msg = chat.Message.ParseFrom(body); Console.WriteLine("recv msg:{0}", recv_msg.ToString()); switch( recv_msg.MsgType ) { case chat.MSG.Login_Request: { Username = recv_msg.Request.Login.Username.ToStringUtf8(); chat.Message login_rsp = new chat.Message.Builder() { MsgType = MSG.Login_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true, Login = new LoginResponse.Builder() { Ttl = 10 }.Build() }.Build() }.Build(); Login = true; SendMessage(login_rsp); var friendNotification = BuildFriendNotification(true); Users.instance().forall((User otherUser) => { if (otherUser != this && otherUser.login ) { otherUser.SendMessage(friendNotification); } }); } break; case chat.MSG.Logout_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Logout_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); Login = false; var friendNotification = BuildFriendNotification(false); Users.instance().forall((User otherUser) => { if (otherUser != this && otherUser.login) { otherUser.SendMessage(friendNotification); } }); } break; case chat.MSG.Keepalive_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Keepalive_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); } break; case chat.MSG.Get_Friends_Request: { GetFriendsResponse.Builder friends = new GetFriendsResponse.Builder(); Users.instance().forall((User usr) => { Friend friend = new Friend.Builder() { Name = pb.ByteString.CopyFromUtf8(usr.Username), Online = usr.Login }.Build(); friends.AddFriends(friend); }); Message rsp_msg = new Message.Builder() { MsgType = MSG.Get_Friends_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true, GetFriends = friends.Build() }.Build() }.Build(); SendMessage(rsp_msg); } break; case chat.MSG.Send_Message_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Send_Message_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); Message text_msg = new Message.Builder() { MsgType = MSG.Message_Notification, Sequence = 0xffffffff, Notification = new Notification.Builder() { Msg = new MessageNotification.Builder() { Sender = pb.ByteString.CopyFromUtf8( Username ), Text = recv_msg.Request.SendMessage.Text, Timestamp = DateTime.Now.ToString() }.Build() }.Build() }.Build(); if (recv_msg.Request.SendMessage.HasReceiver) { string receiver = recv_msg.Request.SendMessage.Receiver.ToStringUtf8(); Users.instance().forall((User usr) => { if (usr.Username.Equals(receiver)) { usr.SendMessage(text_msg); } }); } else { Users.instance().forall((User usr) => { usr.SendMessage(text_msg); }); } } break; default: break; } } catch (Exception e) { Console.WriteLine("ParserMessage Exception:{0}", e.Message); } } catch (Exception ex) { Console.WriteLine("OnReadBody Exception:{0}", ex.Message); } }
private void send_message_Click(object sender, RoutedEventArgs e) { if (msg_text.Text.Length == 0) { return; }; chat.Message msg = new chat.Message.Builder() { MsgType = chat.MSG.Send_Message_Request, Sequence = session.Sequence, SessionId = session.SessionId, Request = new chat.Request.Builder() { SendMessage = new chat.SendMessageRequest.Builder() { Text = pb.ByteString.CopyFromUtf8( msg_text.Text) }.Build() }.Build() }.Build(); Transaction<chat.Message>.AddRequest(msg.Sequence, (chat.Message rsp_msg) => { if (rsp_msg.Response.Result) { //text_messages.Add(new TextMessage(username.Text, msg_text.Text)); msg_text.Text = ""; } }); session.SendMessage(msg); }
private void logout_Click(object sender, RoutedEventArgs e) { chat.Message msg = new chat.Message.Builder() { MsgType = chat.MSG.Logout_Request, Sequence = session.Sequence, SessionId = session.SessionId, }.Build(); Transaction<chat.Message>.AddRequest(msg.Sequence, (chat.Message rsp_msg) => { session.SessionId = 0; this.login.IsEnabled = true; this.logout.IsEnabled = false; my_friends.Clear(); text_messages.Clear(); }); session.SendMessage(msg); }
void OnReadBody(IAsyncResult ar) { try { int len = connection_.Client.EndReceive(ar); body_read_len += len; if (body_read_len < body.Length) { connection_.Client.BeginReceive( body, body_read_len, body.Length - body_read_len, 0, new AsyncCallback(OnReadBody), null); return; } StartReadHead(); try { chat.Message recv_msg = chat.Message.ParseFrom(body); switch (recv_msg.MsgType) { case chat.MSG.Login_Request: { Username = recv_msg.Request.Login.Username.ToStringUtf8(); chat.Message login_rsp = new chat.Message.Builder() { MsgType = MSG.Login_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true, Login = new LoginResponse.Builder() { Ttl = 10 }.Build() }.Build() }.Build(); Login = true; SendMessage(login_rsp); var friendNotification = BuildFriendNotification(true); Users.instance().forall((User otherUser) => { if (otherUser != this && otherUser.login) { otherUser.SendMessage(friendNotification); } }); } break; //case chat.MSG.GetScreen_Request: // { // lock (BMPScreen.IsLockGetJpgBytes) // { // if (this.SendScreen.AddSeconds(1) < DateTime.Now) // { // chat.Message screenresponse = new chat.Message.Builder() // { // MsgType = chat.MSG.GetScreen_Response, // Sequence = recv_msg.Sequence, // Response = new Response.Builder() // { // Result = true, // LastResponse = true, // Screenfile = new GetScreenResponse.Builder() // { // FileBytes = pb.ByteString.CopyFrom(BMPScreen.JpgBytes) // }.Build() // }.Build() // }.Build(); // SendMessage(screenresponse); // this.SendScreen = DateTime.Now; // } // //Console.WriteLine(this.Username); // } // } // break; case chat.MSG.Logout_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Logout_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); Login = false; var friendNotification = BuildFriendNotification(false); Users.instance().forall((User otherUser) => { if (otherUser != this && otherUser.login) { otherUser.SendMessage(friendNotification); } }); } break; case chat.MSG.Keepalive_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Keepalive_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); } break; case chat.MSG.Get_Friends_Request: { GetFriendsResponse.Builder friends = new GetFriendsResponse.Builder(); Users.instance().forall((User usr) => { Friend friend = new Friend.Builder() { Name = pb.ByteString.CopyFromUtf8(usr.Username), Online = usr.Login }.Build(); friends.AddFriends(friend); }); Message rsp_msg = new Message.Builder() { MsgType = MSG.Get_Friends_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true, GetFriends = friends.Build() }.Build() }.Build(); SendMessage(rsp_msg); } break; case chat.MSG.Send_Message_Request: { Message rsp_msg = new Message.Builder() { MsgType = MSG.Send_Message_Response, Sequence = recv_msg.Sequence, SessionId = this.SessionId, Response = new Response.Builder() { Result = true, LastResponse = true }.Build() }.Build(); SendMessage(rsp_msg); Message text_msg = new Message.Builder() { MsgType = MSG.Message_Notification, Sequence = 0xffffffff, Notification = new Notification.Builder() { Msg = new MessageNotification.Builder() { Sender = pb.ByteString.CopyFromUtf8(Username), Text = recv_msg.Request.SendMessage.Text, Timestamp = DateTime.Now.ToString() }.Build() }.Build() }.Build(); if (recv_msg.Request.SendMessage.HasReceiver) { string receiver = recv_msg.Request.SendMessage.Receiver.ToStringUtf8(); Users.instance().forall((User usr) => { if (usr.Username.Equals(receiver)) { usr.SendMessage(text_msg); } }); } else { Users.instance().forall((User usr) => { usr.SendMessage(text_msg); }); } } break; default: break; } } catch (Exception e) { Console.WriteLine("ParserMessage Exception:{0}", e.Message); } } catch (SocketException sockectex) { Console.WriteLine("OnReadBody SockectException:{0}", sockectex.Message); Users.instance().DelUser(this); } catch (Exception ex) { Console.WriteLine("OnReadBody Exception:{0}", ex.Message); } }