public ContactViewModel(User user, ContactViewModel parent) { User = user; IsOnline = user.Online; Status = user.Online ? "Online" : "Offline"; _parent = parent; }
private void InitializeConnection(string url, Cookie authCookie) { _connection = new HubConnection(url) { CookieContainer = new CookieContainer() }; _connection.CookieContainer.Add(authCookie); // Get a reference to the chat proxy _chat = new Chat(_connection); // Start the connection _connection.Start().ContinueWith(task => { if (task.IsFaulted) { // Show a connection error here } else { // Get a list of users and add it to the view model _chat.GetUsers().ContinueWith(getUsersTask => { if (getUsersTask.IsFaulted) { // Show a connection error here } else { var result = getUsersTask.Result; Me = new ContactViewModel(result.Single(u => u.Name == Name)); Me.OpenChatEvent += OnOpenChat; // Exclude current user from Contact list var contacts = from User user in result where !user.Name.Equals(Me.User.Name, StringComparison.OrdinalIgnoreCase) select new ContactViewModel(user, Me); Contacts = new ObservableCollection<ContactViewModel>(contacts); } }); } }); // Fire events on the ui thread _chat.UserOffline += user => _syncContext.Post(_ => OnUserStatusChange(user), null); _chat.UserOnline += user => _syncContext.Post(_ => OnUserStatusChange(user), null); _chat.Message += message => _syncContext.Post(_ => OnMessage(message), null); }