Files
screego/ws/readwrite.go
Jannis Mattheis d228b19430 Fix stopshare event
See #28
2020-10-09 16:37:39 +02:00

53 lines
993 B
Go

package ws
import (
"encoding/json"
"errors"
"fmt"
"io"
"github.com/screego/server/ws/outgoing"
)
type Typed struct {
Type string `json:"type"`
Payload json.RawMessage `json:"payload"`
}
func ToTypedOutgoing(outgoing outgoing.Message) (Typed, error) {
payload, err := json.Marshal(outgoing)
if err != nil {
return Typed{}, err
}
return Typed{
Type: outgoing.Type(),
Payload: payload,
}, nil
}
func ReadTypedIncoming(r io.Reader) (Event, error) {
typed := Typed{}
if err := json.NewDecoder(r).Decode(&typed); err != nil {
return nil, fmt.Errorf("%s e", err)
}
create, ok := provider[typed.Type]
if !ok {
return nil, errors.New("cannot handle " + typed.Type)
}
payload := create()
if err := json.Unmarshal(typed.Payload, payload); err != nil {
return nil, fmt.Errorf("incoming payload %s", err)
}
return payload, nil
}
var provider = map[string]func() Event{}
func register(t string, incoming func() Event) {
provider[t] = incoming
}