private void OnFriendUpdate(FriendListUpdateDto update)
        {
            Friend friend;

            if (_friends.TryGetValue(update.ItemId, out friend))
            {
                friend.Status        = update.Data.Status;
                friend.Details       = update.Data.Details;
                friend.LastConnected = update.Data.LastConnected;
                friend.UserId        = update.Data.UserId;

                var action = FriendUpdated;
                if (action != null)
                {
                    MainThread.Post(() =>
                    {
                        action(friend);
                    });
                }
            }
            else
            {
                _logger.Log(Diagnostics.LogLevel.Warn, "friends.update", "Unknown friend with id " + update.ItemId);
            }
        }
        private void OnFriendNotification(FriendListUpdateDto update)
        {
            switch (update.Operation)
            {
            case "remove":
                OnFriendRemove(update);
                break;

            case "update":
                OnFriendUpdate(update);
                break;

            case "add":
                OnFriendAdd(update);
                break;

            case "update.status":
                OnFriendUpdateStatus(update);
                break;

            default:
                _logger.Log(Diagnostics.LogLevel.Error, "friends", "Unknown friends operation: " + update.Operation);
                break;
            }
        }
        private void OnFriendAdd(FriendListUpdateDto update)
        {
            _friends[update.ItemId] = update.Data;

            var action = FriendAdded;

            if (action != null)
            {
                MainThread.Post(() =>
                {
                    action(update.Data);
                });
            }
        }
        private void OnFriendRemove(FriendListUpdateDto update)
        {
            Friend friend;

            if (_friends.TryRemove(update.ItemId, out friend))
            {
                var action = FriendRemoved;
                if (action != null)
                {
                    MainThread.Post(() =>
                    {
                        action(update.Data);
                    });
                }
            }
            else
            {
                _logger.Log(Diagnostics.LogLevel.Warn, "friends.remove", "Unknown friend with id " + update.ItemId);
            }
        }