| 9732 | } |
| 9733 | |
| 9734 | void GeneratorCpp::GenerateClient_Header(const std::shared_ptr<Package>& p, bool final) |
| 9735 | { |
| 9736 | std::string client = (final ? "FinalClient" : "Client"); |
| 9737 | std::string sender = (final ? "FinalSender" : "Sender"); |
| 9738 | std::string receiver = (final ? "FinalReceiver" : "Receiver"); |
| 9739 | |
| 9740 | // Generate client begin |
| 9741 | WriteLine(); |
| 9742 | if (final) |
| 9743 | WriteLineIndent("// Fast Binary Encoding " + *p->name + " final client"); |
| 9744 | else |
| 9745 | WriteLineIndent("// Fast Binary Encoding " + *p->name + " client"); |
| 9746 | WriteLineIndent("class " + client + " : public virtual " + sender + ", protected virtual " + receiver); |
| 9747 | if (p->import) |
| 9748 | { |
| 9749 | Indent(1); |
| 9750 | for (const auto& import : p->import->imports) |
| 9751 | WriteLineIndent(", public virtual " + *import + "::" + client); |
| 9752 | Indent(-1); |
| 9753 | } |
| 9754 | WriteLineIndent("{"); |
| 9755 | WriteLineIndent("public:"); |
| 9756 | if (p->import) |
| 9757 | { |
| 9758 | Indent(1); |
| 9759 | for (const auto& import : p->import->imports) |
| 9760 | WriteLineIndent("typedef " + *import + "::" + client + " " + *import + client + ";"); |
| 9761 | Indent(-1); |
| 9762 | WriteLine(); |
| 9763 | } |
| 9764 | Indent(1); |
| 9765 | |
| 9766 | // Generate client constructors |
| 9767 | WriteLineIndent(client + "() = default;"); |
| 9768 | WriteLineIndent(client + "(const " + client + "&) = delete;"); |
| 9769 | WriteLineIndent(client + "(" + client + "&&) = delete;"); |
| 9770 | WriteLineIndent("virtual ~" + client + "() = default;"); |
| 9771 | |
| 9772 | // Generate client operators |
| 9773 | WriteLine(); |
| 9774 | WriteLineIndent(client + "& operator=(const " + client + "&) = delete;"); |
| 9775 | WriteLineIndent(client + "& operator=(" + client + "&&) = delete;"); |
| 9776 | |
| 9777 | // Generate imported clients accessors |
| 9778 | if (p->import) |
| 9779 | { |
| 9780 | WriteLine(); |
| 9781 | WriteLineIndent("// Imported clients"); |
| 9782 | for (const auto& import : p->import->imports) |
| 9783 | WriteLineIndent(*import + "::" + client + "& " + *import + "_client() noexcept { return *this; }"); |
| 9784 | } |
| 9785 | |
| 9786 | // Generate client reset method |
| 9787 | WriteLine(); |
| 9788 | WriteLineIndent("// Reset client buffers"); |
| 9789 | WriteLineIndent("void reset() { std::scoped_lock locker(this->_lock); reset_requests(); }"); |
| 9790 | |
| 9791 | // Generate watchdog method |