Support zlib compression.
This commit is contained in:
parent
25a1b2ea48
commit
a08dde4262
2 changed files with 25 additions and 19 deletions
6
util.go
6
util.go
|
@ -17,6 +17,12 @@ import (
|
||||||
"fmt"
|
"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.
|
// printJSON is a helper function to display JSON data in a easy to read format.
|
||||||
func printJSON(body []byte) {
|
func printJSON(body []byte) {
|
||||||
var prettyJSON bytes.Buffer
|
var prettyJSON bytes.Buffer
|
||||||
|
|
38
wsapi.go
38
wsapi.go
|
@ -12,12 +12,11 @@ package discordgo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/flate"
|
"compress/zlib"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
|
@ -66,7 +65,7 @@ func (s *Session) Open() (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
header := http.Header{}
|
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.
|
// TODO: See if there's a use for the http response.
|
||||||
// conn, response, err := websocket.DefaultDialer.Dial(session.Gateway, nil)
|
// 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) {
|
func unmarshalEvent(event *Event, i interface{}) (err error) {
|
||||||
if err = unmarshal(event.RawData, i); err != nil {
|
if err = unmarshal(event.RawData, i); err != nil {
|
||||||
fmt.Println(event.Type, err)
|
fmt.Println("Unable to unmarshal event data.")
|
||||||
printJSON(event.RawData) // TODO: Better error loggingEvent.
|
printEvent(event)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -266,32 +265,33 @@ func unmarshalEvent(event *Event, i interface{}) (err error) {
|
||||||
// Events will be handled by any implemented handler in Session.
|
// Events will be handled by any implemented handler in Session.
|
||||||
// All unhandled events will then be handled by OnEvent.
|
// All unhandled events will then be handled by OnEvent.
|
||||||
func (s *Session) event(messageType int, message []byte) (err error) {
|
func (s *Session) event(messageType int, message []byte) (err error) {
|
||||||
|
|
||||||
if s.Debug {
|
|
||||||
printJSON(message)
|
|
||||||
}
|
|
||||||
|
|
||||||
var reader io.Reader
|
var reader io.Reader
|
||||||
reader = bytes.NewBuffer(message)
|
reader = bytes.NewBuffer(message)
|
||||||
|
|
||||||
if messageType == 2 {
|
if messageType == 2 {
|
||||||
ioutil.WriteFile("ready", message, 0644)
|
z, err1 := zlib.NewReader(reader)
|
||||||
f := flate.NewReader(reader)
|
if err1 != nil {
|
||||||
defer f.Close()
|
err = err1
|
||||||
reader = f
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer z.Close()
|
||||||
|
reader = z
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder := json.NewDecoder(reader)
|
|
||||||
|
|
||||||
var e *Event
|
var e *Event
|
||||||
|
decoder := json.NewDecoder(reader)
|
||||||
if err = decoder.Decode(&e); err != nil {
|
if err = decoder.Decode(&e); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.Debug {
|
||||||
|
printEvent(e)
|
||||||
|
}
|
||||||
|
|
||||||
switch e.Type {
|
switch e.Type {
|
||||||
case "READY":
|
case "READY":
|
||||||
fmt.Println(messageType, e)
|
|
||||||
var st *Ready
|
var st *Ready
|
||||||
if err = unmarshalEvent(e, &st); err == nil {
|
if err = unmarshalEvent(e, &st); err == nil {
|
||||||
go s.heartbeat(s.wsConn, s.listening, st.HeartbeatInterval)
|
go s.heartbeat(s.wsConn, s.listening, st.HeartbeatInterval)
|
||||||
|
@ -626,8 +626,8 @@ func (s *Session) event(messageType int, message []byte) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
fmt.Println("UNKNOWN EVENT: ", e.Type)
|
fmt.Println("Unknown Event.")
|
||||||
printJSON(message)
|
printEvent(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if still here, send to generic OnEvent
|
// if still here, send to generic OnEvent
|
||||||
|
|
Loading…
Reference in a new issue