| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package plugin
- import (
- "context"
- "encoding/json"
- "github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
- )
- type CallbackResponse struct {
- Response interface{} `json:"response"`
- }
- type IPluginMessageHandler func(c context.Context, data *GraphRequest) (*GraphResponse, error)
- type DefaultPluginFrameHandler struct {
- defaultHandler IPluginMessageHandler
- }
- func NewDefaultPluginFrameHandler(defaultHandler IPluginMessageHandler) *DefaultPluginFrameHandler {
- return &DefaultPluginFrameHandler{
- defaultHandler: defaultHandler,
- }
- }
- func (h *DefaultPluginFrameHandler) OnEventReceived(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
- msgData := &GraphRequest{}
- err := json.Unmarshal([]byte(df.Data), msgData)
- if err != nil {
- return nil, err
- }
- if h.defaultHandler == nil {
- return payload.NewDataFrameResponse(payload.DataFrameResponseStatusCodeKHandlerNotFound), nil
- }
- result, err := h.defaultHandler(ctx, msgData)
- if err != nil {
- return nil, err
- }
- result.StatusLine.Code = 200
- result.StatusLine.Reason = "OK"
- callbackResponse := &CallbackResponse{Response: result}
- frameResp := payload.NewSuccessDataFrameResponse()
- if err = frameResp.SetJson(callbackResponse); err != nil {
- return nil, err
- }
- return frameResp, nil
- }
|