| 1117 | typedef TIntrusivePtr<TConnection> TConnectionRef; |
| 1118 | |
| 1119 | struct TRequest: public IRequest { |
| 1120 | struct TState: public TThrRefBase { |
| 1121 | TAtomicBool Canceled = false; |
| 1122 | }; |
| 1123 | typedef TIntrusivePtr<TState> TStateRef; |
| 1124 | |
| 1125 | TRequest(const TConnectionRef& conn, TBuffer& buf, const TString& content); |
| 1126 | ~TRequest() override; |
| 1127 | |
| 1128 | TStringBuf Scheme() const override { |
| 1129 | return TStringBuf("tcp2"); |
| 1130 | } |
| 1131 | |
| 1132 | TString RemoteHost() const override; |
| 1133 | |
| 1134 | TStringBuf Service() const override { |
| 1135 | return TStringBuf(Buf.Data() + sizeof(TRequestHeader), Buf.End()); |
| 1136 | } |
| 1137 | |
| 1138 | TStringBuf Data() const override { |
| 1139 | return TStringBuf(Content_); |
| 1140 | } |
| 1141 | |
| 1142 | TStringBuf RequestId() const override { |
| 1143 | return TStringBuf(); |
| 1144 | } |
| 1145 | |
| 1146 | bool Canceled() const override { |
| 1147 | return State->Canceled; |
| 1148 | } |
| 1149 | |
| 1150 | void SendReply(TData& data) override; |
| 1151 | |
| 1152 | void SendError(TResponseError, const TString&) override { |
| 1153 | // TODO |
| 1154 | } |
| 1155 | |
| 1156 | const TRequestHeader& RequestHeader() const noexcept { |
| 1157 | return *reinterpret_cast<const TRequestHeader*>(Buf.Data()); |
| 1158 | } |
| 1159 | |
| 1160 | private: |
| 1161 | TConnectionRef Conn; |
| 1162 | TBuffer Buf; //service-name + message-data |
| 1163 | TString Content_; |
| 1164 | TAtomic Replied_; |
| 1165 | |
| 1166 | public: |
| 1167 | TIntrusivePtr<TState> State; |
| 1168 | }; |
| 1169 | |
| 1170 | class TConnection: public TThrRefBase { |
| 1171 | private: |