| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "timer.h" |
| |
| namespace overnet { |
| |
| void Timer::At(TimeStamp t, StatusCallback f) { |
| struct CB { |
| CB(StatusCallback f) : fn(std::move(f)) {} |
| Optional<Timeout> timeout; |
| StatusCallback fn; |
| bool done = false; |
| bool initialized = false; |
| }; |
| auto* cb = new CB(std::move(f)); |
| cb->timeout.Reset(this, t, [cb](const Status& status) { |
| cb->fn(status); |
| cb->done = true; |
| if (cb->done && cb->initialized) { |
| delete cb; |
| } |
| }); |
| cb->initialized = true; |
| if (cb->done && cb->initialized) { |
| delete cb; |
| } |
| } |
| |
| } // namespace overnet |