Skip to content

Instantly share code, notes, and snippets.

@kisielk
Created September 9, 2012 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kisielk/3686806 to your computer and use it in GitHub Desktop.
Save kisielk/3686806 to your computer and use it in GitHub Desktop.
type Executor struct {
conn net.Conn
}
func NewExecutorDecoder(r io.Reader) ExecutorDecoder {
d := ExecutorDecoder{}
d.Messages = make(chan string)
d.Decoder = gob.NewDecoder(r)
return d
}
type ExecutorDecoder struct {
Messages chan string
Decoder *gob.Decoder
}
func (d *ExecutorDecoder) Decode() {
var t robota.MessageType
var err error
defer close(d.Messages)
defer log.Printf("error decoding: %s", err)
for {
err = d.Decoder.Decode(&t)
if err != nil {
return
}
switch t {
case robota.MPing:
err = d.decodePing()
default:
err = fmt.Errorf("Unknown message type: %s", t)
}
if err != nil {
return
}
}
}
func (d *ExecutorDecoder) decodePing() error {
var v robota.Ping
err := d.Decoder.Decode(&v)
if err != nil {
return err
}
d.Messages <- "PING"
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment