2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
29 * Base interface to be implemented by all classes expecting to manage
30 * timeouts. AsyncTimeout will use implementations of this interface
31 * to schedule/cancel timeouts.
33 class TimeoutManager {
35 enum class InternalEnum {
40 virtual ~TimeoutManager() {}
43 * Attaches/detaches TimeoutManager to AsyncTimeout
45 virtual void attachTimeoutManager(AsyncTimeout* obj,
46 InternalEnum internal) = 0;
47 virtual void detachTimeoutManager(AsyncTimeout* obj) = 0;
50 * Schedules AsyncTimeout to fire after `timeout` milliseconds
52 virtual bool scheduleTimeout(AsyncTimeout* obj,
53 std::chrono::milliseconds timeout) = 0;
56 * Cancels the AsyncTimeout, if scheduled
58 virtual void cancelTimeout(AsyncTimeout* obj) = 0;
61 * This is used to mark the beginning of a new loop cycle by the
62 * first handler fired within that cycle.
64 virtual bool bumpHandlingTime() = 0;
67 * Helper method to know whether we are running in the timeout manager
70 virtual bool isInTimeoutManagerThread() = 0;