diff options
Diffstat (limited to 'api/logic/net/Sink.h')
-rw-r--r-- | api/logic/net/Sink.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/api/logic/net/Sink.h b/api/logic/net/Sink.h new file mode 100644 index 00000000..53f2b221 --- /dev/null +++ b/api/logic/net/Sink.h @@ -0,0 +1,70 @@ +#pragma once + +#include "net/NetAction.h" + +#include "multimc_logic_export.h" +#include "Validator.h" + +namespace Net { +class MULTIMC_LOGIC_EXPORT Sink +{ +public: /* con/des */ + Sink() {}; + virtual ~Sink() {}; + +public: /* methods */ + virtual JobStatus init(QNetworkRequest & request) = 0; + virtual JobStatus write(QByteArray & data) = 0; + virtual JobStatus abort() = 0; + virtual JobStatus finalize(QNetworkReply & reply) = 0; + + void addValidator(Validator * validator) + { + if(validator) + { + validators.push_back(std::shared_ptr<Validator>(validator)); + } + } + +protected: /* methods */ + bool finalizeAllValidators(QNetworkReply & reply) + { + for(auto & validator: validators) + { + if(!validator->validate(reply)) + return false; + } + return true; + } + bool failAllValidators() + { + bool success = true; + for(auto & validator: validators) + { + success &= validator->abort(); + } + return success; + } + bool initAllValidators(QNetworkRequest & request) + { + for(auto & validator: validators) + { + if(!validator->init(request)) + return false; + } + return true; + } + bool writeAllValidators(QByteArray & data) + { + for(auto & validator: validators) + { + if(!validator->write(data)) + return false; + } + return true; + } + +protected: /* data */ + std::vector<std::shared_ptr<Validator>> validators; +}; +} |