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);
        }
Example #3
0
        /// <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
        }
Example #4
0
        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);
        }
Example #7
0
        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);
            }
        }