MCPcopy Create free account
hub / github.com/LiteLDev/LeviLamina / ClientThreadExecutor

Method ClientThreadExecutor

src-client/ll/api/thread/ClientThreadExecutor.cpp:63–88  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61 event::ListenerPtr worker;
62};
63ClientThreadExecutor::ClientThreadExecutor(std::string name, Duration maxOnceDuration, size_t checkPack)
64: Executor(std::move(name)),
65 impl(std::make_unique<Impl>(std::make_shared<Impl::SharedImpl>())) {
66 impl->worker = event::EventBus::getInstance().emplaceListener<event::ClientLevelTickEvent>(
67 [name = getName(), maxOnceDuration, checkPack, weak = std::weak_ptr{impl->shared}](auto&&) {
68 auto impl = weak.lock();
69 if (!impl) {
70 return;
71 }
72 auto begin = Clock::now();
73 impl->update([&](auto& f, size_t i) {
74 try {
75 f();
76 } catch (...) {
77 getLogger().error("Error in {}:", name);
78 error_utils::printCurrentException(getLogger());
79 }
80 if (i % checkPack == 0 && Clock::now() - begin > maxOnceDuration) {
81 return false;
82 }
83 return true;
84 });
85 },
86 event::EventPriority::Low
87 );
88}
89ClientThreadExecutor::~ClientThreadExecutor() {
90 event::EventBus::getInstance().removeListener<event::ClientLevelTickEvent>(impl->worker);
91}

Callers

nothing calls this directly

Calls 4

printCurrentExceptionFunction · 0.85
lockMethod · 0.45
updateMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected