public void Init(UserDataManager userData)
        {
            _userData = userData;
            var session = _userData.PgSession;

            session.OnThread("Message.Send.new", OnPrivateMessageSent);
            session.OnThread("Message.Receive.new", OnPrivateMessageReceived);
            session.OnThread("Message.Send.fail", OnPrivateMessageSendFailed);

            session.OnThread("Chatroom.Join.fail", OnChatroomJoinFailed);
            session.OnThread("Chatroom.User.list", OnChatroomUserList);
            session.OnThread("Chatroom.Member.list", OnChatroomMemberList);
            session.OnThread("Chatroom.Member.change", OnChatroomMemberChange);
            session.OnThread("Chatroom.Message.new", OnChatroomMessageNew);
            session.OnThread("Chatroom.Invite.new", OnChatroomInviteNew);

            session.OnThread("GameRoom.new", OnGameRoomNew);
            session.OnThread("GameRoom.update", OnGameRoomUpdate);
            session.OnThread("GameRoom.destroy", OnGameRoomDestroy);

            session.OnThread("Match.new", OnMatchNew);
            session.OnThread("Match.update", OnMatchUpdate);
            session.OnThread("Bet.new", OnBetNew);
            session.OnThread("Bet.Taker.new", OnBetTakerNew);
            session.OnThread("Bet.update", OnBetUpdate);
            session.OnThread("Bet.destroy", OnBetDestroy);

            ChatroomUserGetList();
        }
        private void DoLogin(string username, string password)
        {
            var workMessage = "Logging in...";

            SetWork(workMessage, Brushes.Black, false);

            passwordBoxPassword.Clear();

            DateTime timeout = DateTime.Now + App.Settings.LogInTimeout;

            bool isSuccess = false;
            SocketSession.BeginAndCallback(delegate
            {
                isSuccess = SocketSession.Login(username, password, timeout);
            }, delegate
            {
                if (isSuccess)
                {
                    IsLoggedIn = true;

                    App.LoggedIn(username);

                    var userData = new UserDataManager(SocketSession);
                    var homeWindow = new HomeWindow();
                    homeWindow.Init();
                    Hide();
                    homeWindow.Show();

                    App.Settings.Username = username;
                    if (checkBoxRememberPassword.IsChecked == true)
                        App.Settings.Password = password.Encrypt();
                    else
                        App.Settings.Password = "";
                    App.Settings.Save();

                    Close();

                    foreach (var action in _loginSuccessActions)
                    {
                        try
                        {
                            action();
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Login success action threw Exception: " + e.Message);
                            Console.WriteLine(e.StackTrace);
                        }
                    }
                }
                else
                {
                    var message = "Invalid username or password";
                    if (DateTime.Now >= timeout)
                        message = "Try again later.  No response within timeout period.";

                    SetWork(message, Brushes.Red, true);
                    passwordBoxPassword.Focus();
                }
                _loginSuccessActions.Clear();
            });
        }
        public UserDataManager(SocketSession session)
        {
            UserData = this;
            Settings = PointGaming.Settings.SettingsUser.Load(session.User.username);
            PgSession = session;
            User = GetPgUser(session.User);
            User.Status = "online";
            _sessionManager = new SessionManager();
            Friendship = new FriendshipManager(PgSession);
            Voip = new VoipSession(this);
            Voip.Enable();

            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(5);
            timer.Tick += new EventHandler(CheckIdle);
            timer.Start();
        }