Add fabric websocket transport adapter

This commit is contained in:
2026-05-16 00:12:42 +03:00
parent f82e6990f2
commit 01f28693f5
4 changed files with 244 additions and 13 deletions
@@ -43,20 +43,10 @@ func (l TransportLoop) Run(ctx context.Context, r io.Reader, w io.Writer) error
}
func (l TransportLoop) Handle(ctx context.Context, frame Frame, w io.Writer) error {
if l.Session == nil {
return ErrSessionNotConfigured
}
event, responses, err := l.Session.HandleFrame(frame)
responses, err := l.HandleFrame(ctx, frame)
if err != nil {
return err
}
if l.OnEvent != nil && event.Type != SessionEventNone {
extra, err := l.OnEvent(event)
if err != nil {
return err
}
responses = append(responses, extra...)
}
for _, response := range responses {
select {
case <-ctx.Done():
@@ -70,4 +60,27 @@ func (l TransportLoop) Handle(ctx context.Context, frame Frame, w io.Writer) err
return nil
}
func (l TransportLoop) HandleFrame(ctx context.Context, frame Frame) ([]Frame, error) {
if l.Session == nil {
return nil, ErrSessionNotConfigured
}
event, responses, err := l.Session.HandleFrame(frame)
if err != nil {
return nil, err
}
if l.OnEvent != nil && event.Type != SessionEventNone {
extra, err := l.OnEvent(event)
if err != nil {
return nil, err
}
responses = append(responses, extra...)
}
select {
case <-ctx.Done():
return nil, ctx.Err()
default:
}
return responses, nil
}
var ErrSessionNotConfigured = errors.New("fabric transport loop session is not configured")