Skip to content

Commit 693544d

Browse files
committed
1 parent 4f1c894 commit 693544d

3 files changed

Lines changed: 79 additions & 0 deletions

File tree

polycode/client.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,25 @@ type ListFilePageResponse struct {
198198
IsTruncated bool `json:"isTruncated"`
199199
}
200200

201+
type SignalEmitRequest struct {
202+
TaskId string `json:"taskId"`
203+
SignalName string `json:"signalName"`
204+
Output any `json:"output"`
205+
IsError bool `json:"isError"`
206+
Error Error `json:"error"`
207+
}
208+
209+
type SignalWaitRequest struct {
210+
SignalName string `json:"signalName"`
211+
}
212+
213+
type SignalWaitResponse struct {
214+
IsAsync bool `json:"isAsync"`
215+
Output any `json:"output"`
216+
IsError bool `json:"isError"`
217+
Error Error `json:"error"`
218+
}
219+
201220
type IncrementCounterRequest struct {
202221
Group string `json:"group"`
203222
Name string `json:"name"`
@@ -380,6 +399,16 @@ func (sc *ServiceClient) CreateFolder(sessionId string, req CreateFolderRequest)
380399
return executeApiWithoutResponse(sc.httpClient, sc.baseURL, sessionId, "v1/context/file/create-folder", req)
381400
}
382401

402+
func (sc *ServiceClient) EmitSignal(sessionId string, req SignalEmitRequest) error {
403+
return executeApiWithoutResponse(sc.httpClient, sc.baseURL, sessionId, "v1/context/signal/emit", req)
404+
}
405+
406+
func (sc *ServiceClient) WaitForSignal(sessionId string, req SignalWaitRequest) (SignalWaitResponse, error) {
407+
res := SignalWaitResponse{}
408+
err := executeApiWithResponse(sc.httpClient, sc.baseURL, sessionId, "v1/context/signal/await", req, &res)
409+
return res, err
410+
}
411+
383412
func (sc *ServiceClient) IncrementCounter(sessionId string, req IncrementCounterRequest) (IncrementCounterResponse, error) {
384413
var res IncrementCounterResponse
385414
err := executeApiWithResponse(sc.httpClient, sc.baseURL, sessionId, "v1/utils/counter/increment", req, &res)

polycode/context.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package polycode
22

33
import (
44
"context"
5+
"fmt"
56
"time"
67
)
78

@@ -29,6 +30,9 @@ type WorkflowContext interface {
2930
ControllerEx(envId string, controller string) RemoteController
3031
UnsafeDb() *UnsafeDataStoreBuilder
3132
Memo(getter func() (any, error)) Response
33+
SignalAwait(signalName string) Response
34+
SignalEmitData(taskId string, signalName string, data any) error
35+
SignalEmitError(taskId string, signalName string, err Error) error
3236
}
3337

3438
type ApiContext interface {
@@ -134,6 +138,51 @@ func (s ContextImpl) Acknowledge() error {
134138
return s.serviceClient.Acknowledge(s.sessionId)
135139
}
136140

141+
func (s ContextImpl) SignalAwait(signalName string) Response {
142+
req := SignalWaitRequest{
143+
SignalName: signalName,
144+
}
145+
146+
output, err := s.serviceClient.WaitForSignal(s.sessionId, req)
147+
if err != nil {
148+
fmt.Printf("client: signal await error: %v\n", err)
149+
return Response{
150+
output: nil,
151+
isError: true,
152+
error: ErrTaskExecError.Wrap(err),
153+
}
154+
}
155+
156+
fmt.Printf("client: signal await output: %v\n", output)
157+
return Response{
158+
output: output.Output,
159+
isError: output.IsError,
160+
error: output.Error,
161+
}
162+
}
163+
164+
func (s ContextImpl) SignalEmitData(taskId string, signalName string, data any) error {
165+
req := SignalEmitRequest{
166+
TaskId: taskId,
167+
SignalName: signalName,
168+
Output: data,
169+
IsError: false,
170+
}
171+
172+
return s.serviceClient.EmitSignal(s.sessionId, req)
173+
}
174+
175+
func (s ContextImpl) SignalEmitError(taskId string, signalName string, err Error) error {
176+
req := SignalEmitRequest{
177+
TaskId: taskId,
178+
SignalName: signalName,
179+
IsError: true,
180+
Error: err,
181+
}
182+
183+
return s.serviceClient.EmitSignal(s.sessionId, req)
184+
}
185+
137186
func (s ContextImpl) Counter(group string, name string, ttl int64) Counter {
138187
return Counter{
139188
client: s.serviceClient,

polycode/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ type ContextMeta struct {
117117
TaskGroup string `json:"taskGroup"`
118118
TaskName string `json:"taskName"`
119119
TaskId string `json:"taskId"`
120+
ParentId string `json:"parentId"`
120121
TraceId string `json:"traceId"`
121122
InputId string `json:"inputId"`
122123
}

0 commit comments

Comments
 (0)