-
Notifications
You must be signed in to change notification settings - Fork 0
/
parseEvent.go
56 lines (49 loc) · 1.11 KB
/
parseEvent.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package client
import (
"bytes"
"encoding/json"
"errors"
"io"
"io/ioutil"
"github.com/niakr1s/chatty-server/app/events"
)
var (
errUnknownEvent = errors.New("unknown event")
)
func parseEvent(r io.ReadCloser) (events.Event, error) {
b, err := ioutil.ReadAll(r)
r.Close()
if err != nil {
return nil, err
}
type typeExtractor struct {
Type string `json:"type"`
}
t := typeExtractor{}
if err := json.NewDecoder(bytes.NewReader(b)).Decode(&t); err != nil {
return nil, err
}
ewt := events.EventWithType{}
switch t.Type {
case "ChatJoinEvent":
ewt.Event = &events.ChatJoinEvent{}
case "ChatLeaveEvent":
ewt.Event = &events.ChatLeaveEvent{}
case "LoginEvent":
ewt.Event = &events.LoginEvent{}
case "LogoutEvent":
ewt.Event = &events.LogoutEvent{}
case "ChatCreatedEvent":
ewt.Event = &events.ChatCreatedEvent{}
case "ChatRemovedEvent":
ewt.Event = &events.ChatRemovedEvent{}
case "MessageEvent":
ewt.Event = &events.MessageEvent{}
default:
return nil, errUnknownEvent
}
if err := json.NewDecoder(bytes.NewReader(b)).Decode(&ewt); err != nil {
return nil, err
}
return ewt.Event, nil
}