io.go 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. package local_runtime
  2. import (
  3. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_daemon/access_types"
  4. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  5. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  6. "github.com/langgenius/dify-plugin-daemon/pkg/entities"
  7. "github.com/langgenius/dify-plugin-daemon/pkg/entities/plugin_entities"
  8. )
  9. func (r *LocalPluginRuntime) Listen(session_id string) *entities.Broadcast[plugin_entities.SessionMessage] {
  10. listener := entities.NewBroadcast[plugin_entities.SessionMessage]()
  11. listener.OnClose(func() {
  12. removeStdioHandlerListener(r.ioIdentity, session_id)
  13. })
  14. setupStdioEventListener(r.ioIdentity, session_id, func(b []byte) {
  15. // unmarshal the session message
  16. data, err := parser.UnmarshalJsonBytes[plugin_entities.SessionMessage](b)
  17. if err != nil {
  18. log.Error("unmarshal json failed: %s, failed to parse session message", err.Error())
  19. return
  20. }
  21. listener.Send(data)
  22. })
  23. return listener
  24. }
  25. func (r *LocalPluginRuntime) Write(session_id string, action access_types.PluginAccessAction, data []byte) {
  26. writeToStdioHandler(r.ioIdentity, append(data, '\n'))
  27. }