Branch data Line data Source code
1 : : /*
2 : : * Copyright 2025 Jinwoo Sung
3 : : *
4 : : * Licensed under the Apache License, Version 2.0 (the "License");
5 : : * you may not use this file except in compliance with the License.
6 : : * You may obtain a copy of the License at
7 : : *
8 : : * http://www.apache.org/licenses/LICENSE-2.0
9 : : *
10 : : * Unless required by applicable law or agreed to in writing, software
11 : : * distributed under the License is distributed on an "AS IS" BASIS,
12 : : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : : * See the License for the specific language governing permissions and
14 : : * limitations under the License.
15 : : */
16 : :
17 : : #pragma once
18 : :
19 : : #include <boost/asio/steady_timer.hpp>
20 : : #include <vector>
21 : :
22 : : #include "wirestead/wrapper/bounded_receive.hpp"
23 : :
24 : : namespace wirestead::wrapper::detail {
25 : : // Access is protected by the owning wrapper mutex. Timer handlers run on the
26 : : // session executor; weak ownership and run gates exclude retired sessions.
27 : : struct SessionBatch {
28 : 729 : SessionBatch(boost::asio::any_io_executor executor, std::shared_ptr<ReceiveScope> scope)
29 : 729 : : receive(std::move(scope)), timer(std::move(executor)) {}
30 : : ReceiveState receive;
31 : : ReceiveBatch data;
32 : : ReceiveBatch messages;
33 : : boost::asio::steady_timer timer;
34 : : bool scheduled = false;
35 : 729 : ~SessionBatch() { timer.cancel(); }
36 : : };
37 : : } // namespace wirestead::wrapper::detail
|