Skip to content
File

Blob: src/workerd/api/scheduled.h

cpp80 lines
1// Copyright (c) 2017-2022 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5#pragma once
6 
7#include "basics.h"
8 
9#include <workerd/jsg/jsg.h>
10 
11namespace workerd::api {
12 
13class ScheduledEvent final: public ExtendableEvent {
14 public:
15 explicit ScheduledEvent(double scheduledTime, kj::StringPtr cron);
16 
17 static jsg::Ref<ScheduledEvent> constructor(kj::String type) = delete;
18 
19 double getScheduledTime() {
20 return scheduledTime;
21 }
22 kj::StringPtr getCron() {
23 return cron;
24 }
25 void noRetry();
26 
27 JSG_RESOURCE_TYPE(ScheduledEvent) {
28 JSG_INHERIT(ExtendableEvent);
29 
30 JSG_READONLY_INSTANCE_PROPERTY(scheduledTime, getScheduledTime);
31 JSG_READONLY_INSTANCE_PROPERTY(cron, getCron);
32 JSG_METHOD(noRetry);
33 }
34 
35 void visitForMemoryInfo(jsg::MemoryTracker& tracker) const {
36 tracker.trackField("cron", cron);
37 }
38 
39 private:
40 double scheduledTime;
41 kj::String cron;
42};
43 
44// Type used when calling a module-exported scheduled event handler.
45class ScheduledController final: public jsg::Object {
46 public:
47 ScheduledController(jsg::Ref<ScheduledEvent> event): event(kj::mv(event)) {}
48 
49 double getScheduledTime() {
50 return event->getScheduledTime();
51 }
52 kj::StringPtr getCron() {
53 return event->getCron();
54 }
55 void noRetry() {
56 event->noRetry();
57 }
58 
59 JSG_RESOURCE_TYPE(ScheduledController) {
60 JSG_READONLY_INSTANCE_PROPERTY(scheduledTime, getScheduledTime);
61 JSG_READONLY_INSTANCE_PROPERTY(cron, getCron);
62 JSG_METHOD(noRetry);
63 }
64 
65 void visitForMemoryInfo(jsg::MemoryTracker& tracker) const {
66 tracker.trackField("event", event);
67 }
68 
69 private:
70 jsg::Ref<ScheduledEvent> event;
71 
72 void visitForGc(jsg::GcVisitor& visitor) {
73 visitor.visit(event);
74 }
75};
76 
77#define EW_SCHEDULED_ISOLATE_TYPES api::ScheduledEvent, api::ScheduledController
78// The list of scheduled.h types that are added to worker.c++'s JSG_DECLARE_ISOLATE_TYPE
79} // namespace workerd::api