From 21705cc16e581ac304fbccc0fc7c45a86a6d8268 Mon Sep 17 00:00:00 2001 From: Stephen McQuay Date: Mon, 10 Mar 2014 00:04:45 -0700 Subject: [PATCH] Added encoding negociation to protocol --- botserv.go | 4 +++- robot.go | 23 +++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/botserv.go b/botserv.go index 724fb82..0dd3053 100644 --- a/botserv.go +++ b/botserv.go @@ -1,8 +1,9 @@ package main import ( - "bitbucket.org/hackerbots/vector" "fmt" + + "bitbucket.org/hackerbots/vector" ) type ClientConfig struct { @@ -22,6 +23,7 @@ type GameParam struct { MaxPoints int `json:"max_points"` Name string `json:"name"` Type string `json:"type"` + Encoding string `json:"encoding"` } type StatsRequest struct { diff --git a/robot.go b/robot.go index 978499c..83fe9d7 100644 --- a/robot.go +++ b/robot.go @@ -1,14 +1,15 @@ package main import ( - "bitbucket.org/hackerbots/vector" - "code.google.com/p/go.net/websocket" "errors" "fmt" "log" "math" "math/rand" "sync" + + "bitbucket.org/hackerbots/vector" + "code.google.com/p/go.net/websocket" ) const maxSpeed = 100 @@ -86,6 +87,22 @@ func (r *robot) negociate() (err error) { if err != nil { return err } + + encodings := []string{} + err = websocket.JSON.Receive(r.ws, &encodings) + log.Printf("%+v", encodings) + desiredEncoding := "json" + for _, encoding := range encodings { + if "gob" == encoding { + desiredEncoding = encoding + break + } + } + err = websocket.JSON.Send(r.ws, desiredEncoding) + if err != nil { + return err + } + err = websocket.JSON.Receive(r.ws, &r.game) if r.game.Type != "gameparam" { return errors.New("didn't receive a good gameparam") @@ -93,6 +110,8 @@ func (r *robot) negociate() (err error) { if *verbose { log.Printf("%s: game parameters: %+v", r.name, r.game) } + // TODO: do something with r.game.Protocol + log.Printf("game params: %+v", r.game) conf := ClientConfig{ ID: r.game.Name,