io.go 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. package local_manager
  2. import (
  3. "github.com/langgenius/dify-plugin-daemon/internal/types/entities"
  4. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  5. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  6. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  7. )
  8. func (r *LocalPluginRuntime) Listen(session_id string) *entities.Broadcast[plugin_entities.SessionMessage] {
  9. listener := entities.NewBroadcast[plugin_entities.SessionMessage]()
  10. listener.OnClose(func() {
  11. RemoveStdioListener(r.io_identity, session_id)
  12. })
  13. OnStdioEvent(r.io_identity, session_id, func(b []byte) {
  14. // unmarshal the session message
  15. data, err := parser.UnmarshalJsonBytes[plugin_entities.SessionMessage](b)
  16. if err != nil {
  17. log.Error("unmarshal json failed: %s, failed to parse session message", err.Error())
  18. return
  19. }
  20. // set the runtime type
  21. data.RuntimeType = r.Type()
  22. listener.Send(data)
  23. })
  24. return listener
  25. }
  26. func (r *LocalPluginRuntime) Write(session_id string, data []byte) {
  27. WriteToStdio(r.io_identity, append(data, '\n'))
  28. }