public async Task <ChadderError> TakeAllMessagesBack(ChadderConversation conversation)
        {
            var package = new TakeMessageBackContent();
            var content = await EncryptForUser(package, conversation.Contact);

            var request = new SendPackageParameter()
            {
                UserId = conversation.ContactUserId,
                Data   = content.Serialize()
            };
            var result = await AuthorizedRequest <BasicResponse <string> >(Connection.ChatHub, "SendPackageToUser", request);

            if (result.Error == ChadderError.OK)
            {
                await db.DeleteAllMessages(conversation);
            }
            return(result.Error);
        }
        protected async Task <ChadderError> SendMessageToServer(ChadderMessage msg, ChadderConversation conversation)
        {
            try
            {
                BasicMessage package = null;
                if (msg.Type == ChadderMessage.MESSAGE_TYPE.TEXT)
                {
                    package = new TextMessage()
                    {
                        Body = msg.Body
                    };
                }
                else if (msg.Type == ChadderMessage.MESSAGE_TYPE.PICTURE)
                {
                    if (msg.Picture.ToBeUploaded)
                    {
                        var record = await sqlDB.GetPicture(msg.Picture.RecordId);

                        var presult = await UploadPicture(record);

                        if (presult.Error == ChadderError.OK)
                        {
                            msg.PictureId = record.PictureId;
                            await sqlDB.UpdateAsync(msg);
                        }
                        else
                        {
                            return(presult.Error);
                        }
                    }
                    package = new ImageMessage()
                    {
                        PictureId = msg.PictureId
                    };
                }
                else
                {
                    Insight.Track("Invalid Message Type in SendMessageToServer");
                    return(ChadderError.INVALID_INPUT);
                }
                package.Id         = msg.MessageId;
                package.Group      = null;
                package.TimeSent   = msg.TimeSent.Value;
                package.Expiration = msg.Expiration.Value;

                var content = await EncryptForUser(package, conversation.Contact);

                var request = new SendPackageParameter()
                {
                    UserId = conversation.ContactUserId,
                    Data   = content.Serialize()
                };
                var result = await AuthorizedRequest <BasicResponse <string> >(Connection.ChatHub, "SendPackageToUser", request);

                if (result.Error == ChadderError.OK)
                {
                    msg.Status      = ChadderMessage.MESSAGE_STATUS.SENT;
                    msg.TimeServer  = result.Time;
                    msg.ReferenceId = result.Extra;
                    await sqlDB.UpdateAsync(msg);
                }
                return(result.Error);
            }
            catch (Exception ex)
            {
                Insight.Report(ex);
                return(ChadderError.GENERAL_EXCEPTION);
            }
        }