Add fabric websocket transport adapter
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user