bool AskService::SubmitQuestion(IAnswer *answerCB, char16* nickname, char16* password, char16* questionText, int32 numberOfPhotos, int32 responseType, ArrayOfString *customResponses, int32 durationType, bool isPrivate)
{
    if (!StartRequest(answerCB, AskService::EPS_SUBMITQUESTION))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(16);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(questionText);
    isOk = isOk &&  str->WriteInt32(numberOfPhotos);
    isOk = isOk &&  str->WriteInt32(responseType);
    isOk = isOk &&  customResponses->WriteToStream(str);
    isOk = isOk &&  str->WriteInt32(durationType);
    isOk = isOk &&  str->WriteInt8((int8)isPrivate);

    return isOk && EndRequest();

}
bool AskService::CompleteQuestion(IAnswer *answerCB, char16* nickname, char16* password, char16* askQuestionID)
{
    if (!StartRequest(answerCB, AskService::EPS_COMPLETEQUESTION))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(8);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(askQuestionID);

    return isOk && EndRequest();

}
bool SnapUpService::DeletePhoto(IAnswer *answerCB, char16* nickname, char16* password, char16* webPhotoID)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_DELETEPHOTO))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(23);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(webPhotoID);

    return isOk && EndRequest();

}
bool SnapUpService::CreateCollection(IAnswer *answerCB, char16* nickname, char16* password, char16* collectionName)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_CREATECOLLECTION))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(22);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(collectionName);

    return isOk && EndRequest();

}
bool SnapUpService::GetPhotosByCollection(IAnswer *answerCB, char16* nickname, char16* password, char16* webPhotoCollectionID)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_GETPHOTOSBYCOLLECTION))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(26);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(webPhotoCollectionID);

    return isOk && EndRequest();

}
bool SnapUpService::DeviceUploadPhoto(IAnswer *answerCB, char16* nickname, char16* password, ArrayOfInt8 *base64StringPhoto, char16* dateTime)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_DEVICEUPLOADPHOTO))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(22);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  base64StringPhoto->WriteToStream(str);
    isOk = isOk &&  str->WriteWString(dateTime);

    return isOk && EndRequest();

}
bool SnapUpService::JavaUploadPhoto(IAnswer *answerCB, char16* encryptedWebMemberID, char16* webPhotoCollectionID, ArrayOfInt8 *base64StringPhoto, char16* dateTime)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_JAVAUPLOADPHOTO))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(27);//request id

  
    isOk = isOk &&  str->WriteWString(encryptedWebMemberID);
    isOk = isOk &&  str->WriteWString(webPhotoCollectionID);
    isOk = isOk &&  base64StringPhoto->WriteToStream(str);
    isOk = isOk &&  str->WriteWString(dateTime);

    return isOk && EndRequest();

}
bool AskService::AttachPhoto(IAnswer *answerCB, char16* nickname, char16* password, char16* askQuestionID, int32 indexOrder, ArrayOfInt8 *photoBase64String)
{
    if (!StartRequest(answerCB, AskService::EPS_ATTACHPHOTO))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(7);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(askQuestionID);
    isOk = isOk &&  str->WriteInt32(indexOrder);
    isOk = isOk &&  photoBase64String->WriteToStream(str);

    return isOk && EndRequest();

}
bool SnapUpService::UploadPhoto(IAnswer *answerCB, char16* nickname, char16* password, char16* webPhotoCollectionID, ArrayOfInt8 *photoFileBytes, char16* takenDT)
{
    if (!StartRequest(answerCB, SnapUpService::EPS_UPLOADPHOTO))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(29);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteWString(webPhotoCollectionID);
    isOk = isOk &&  photoFileBytes->WriteToStream(str);
    isOk = isOk &&  str->WriteWString(takenDT);

    return isOk && EndRequest();

}
bool AskService::GetQuestionIDs(IAnswer *answerCB, char16* nickname, char16* password)
{
    if (!StartRequest(answerCB, AskService::EPS_GETQUESTIONIDS))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(12);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);

    return isOk && EndRequest();

}
bool AskService::SkipQuestion(IAnswer *answerCB, char16* nickname, char16* password, int32 questionID)
{
    if (!StartRequest(answerCB, AskService::EPS_SKIPQUESTION))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(15);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteInt32(questionID);

    return isOk && EndRequest();

}
bool AskService::GetResponse(IAnswer *answerCB, char16* nickname, char16* password, int32 questionID)
{
    if (!StartRequest(answerCB, AskService::EPS_GETRESPONSE))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(13);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteInt32(questionID);

    return isOk && EndRequest();

}
bool AskService::AddComment(IAnswer *answerCB, char16* nickname, char16* password, AskComment *newComment)
{
    if (!StartRequest(answerCB, AskService::EPS_ADDCOMMENT))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(6);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  newComment->WriteToStream(str);

    return isOk && EndRequest();

}
bool AskService::GetComment(IAnswer *answerCB, char16* nickname, char16* password, int32 commentID)
{
    if (!StartRequest(answerCB, AskService::EPS_GETCOMMENT))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(9);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteInt32(commentID);

    return isOk && EndRequest();

}
bool AskService::HasNewComments(IAnswer *answerCB, char16* nickname, char16* password, int32 questionID, int32 lastCommentID)
{
    if (!StartRequest(answerCB, AskService::EPS_HASNEWCOMMENTS))
    {
        return false;
    }

    PacketStream *str = pServer->GetStream();
    bool isOk = true;

    isOk = isOk && str->WriteInt32(14);//request id

  
    isOk = isOk &&  str->WriteWString(nickname);
    isOk = isOk &&  str->WriteWString(password);
    isOk = isOk &&  str->WriteInt32(questionID);
    isOk = isOk &&  str->WriteInt32(lastCommentID);

    return isOk && EndRequest();

}