diff --git a/util.go b/util.go index 00ccb9d..20ab084 100644 --- a/util.go +++ b/util.go @@ -17,6 +17,12 @@ import ( "fmt" ) +// printEvent prints out a WSAPI event. +func printEvent(e *Event) { + fmt.Println(fmt.Sprintf("Event. Type: %s, State: %d Operation: %d Direction: %d", e.Type, e.State, e.Operation, e.Direction)) + printJSON(e.RawData) +} + // printJSON is a helper function to display JSON data in a easy to read format. func printJSON(body []byte) { var prettyJSON bytes.Buffer diff --git a/wsapi.go b/wsapi.go index 376c274..bea580b 100644 --- a/wsapi.go +++ b/wsapi.go @@ -12,12 +12,11 @@ package discordgo import ( "bytes" - "compress/flate" + "compress/zlib" "encoding/json" "errors" "fmt" "io" - "io/ioutil" "net/http" "runtime" "time" @@ -66,7 +65,7 @@ func (s *Session) Open() (err error) { } header := http.Header{} - header.Add("accept-encoding", "gzip, deflate") + header.Add("accept-encoding", "zlib") // TODO: See if there's a use for the http response. // conn, response, err := websocket.DefaultDialer.Dial(session.Gateway, nil) @@ -252,8 +251,8 @@ func (s *Session) UpdateStatus(idle int, game string) (err error) { func unmarshalEvent(event *Event, i interface{}) (err error) { if err = unmarshal(event.RawData, i); err != nil { - fmt.Println(event.Type, err) - printJSON(event.RawData) // TODO: Better error loggingEvent. + fmt.Println("Unable to unmarshal event data.") + printEvent(event) } return } @@ -266,32 +265,33 @@ func unmarshalEvent(event *Event, i interface{}) (err error) { // Events will be handled by any implemented handler in Session. // All unhandled events will then be handled by OnEvent. func (s *Session) event(messageType int, message []byte) (err error) { - - if s.Debug { - printJSON(message) - } - var reader io.Reader reader = bytes.NewBuffer(message) if messageType == 2 { - ioutil.WriteFile("ready", message, 0644) - f := flate.NewReader(reader) - defer f.Close() - reader = f + z, err1 := zlib.NewReader(reader) + if err1 != nil { + err = err1 + fmt.Println(err) + return + } + defer z.Close() + reader = z } - decoder := json.NewDecoder(reader) - var e *Event + decoder := json.NewDecoder(reader) if err = decoder.Decode(&e); err != nil { fmt.Println(err) return } + if s.Debug { + printEvent(e) + } + switch e.Type { case "READY": - fmt.Println(messageType, e) var st *Ready if err = unmarshalEvent(e, &st); err == nil { go s.heartbeat(s.wsConn, s.listening, st.HeartbeatInterval) @@ -626,8 +626,8 @@ func (s *Session) event(messageType int, message []byte) (err error) { return } default: - fmt.Println("UNKNOWN EVENT: ", e.Type) - printJSON(message) + fmt.Println("Unknown Event.") + printEvent(e) } // if still here, send to generic OnEvent