# HG changeset patch # User sqwishy # Date 1391250941 28800 # Sat Feb 01 02:35:41 2014 -0800 # Node ID cda543e75b9c75da8b4a97192592780ec79176d8 # Parent 42d7e7142fc22ca4ad962af12e06a6eba8d59abe added dummy client code, moved the lib stuffs into its own directory diff --git a/gorcon.go b/gorcon/gorcon.go rename from gorcon.go rename to gorcon/gorcon.go diff --git a/gorcon_test.go b/gorcon/gorcon_test.go rename from gorcon_test.go rename to gorcon/gorcon_test.go diff --git a/main.go b/main.go new file mode 100644 --- /dev/null +++ b/main.go @@ -0,0 +1,96 @@ +package main + +import "fmt" +import "log" +import "net" +import "./gorcon" // Relative imports! Woo hoo! +import "io" +import "bufio" +import "encoding/binary" + +var _ = fmt.Println +var _ = log.Println +var _ = io.EOF + +type response struct { + Id int32 + Type gorcon.CmdType + Body []byte +} + +func readResp(r io.Reader, ) (*response, error) { + var size int32 + if err := binary.Read(r, binary.LittleEndian, &size); err != nil { + return nil, err + } + log.Println("size: ", size) + //if size < 10 { + // return nil, "invalid response data, oh noes!" + //} + + var id int32 + if err := binary.Read(r, binary.LittleEndian, &id); err != nil { + return nil, err + } + + var cmdtype gorcon.CmdType + if err := binary.Read(r, binary.LittleEndian, &cmdtype); err != nil { + return nil, err + } + + body := make([]byte, size - 10) + if err := binary.Read(r, binary.LittleEndian, body); err != nil { + return nil, err + } + + var end int16 + err := binary.Read(r, binary.LittleEndian, &end) + if err != nil { + return nil, err + } + + return &response{ + Id: id, + Type: cmdtype, + Body: body, + }, nil +} + +func main() { + log.Println("Hello, world!") + + conn, err := net.Dial("tcp", "74.91.117.120:27015") + if err != nil { + log.Panicln(err) + } + + done := make(chan bool) + + go func() { + r := bufio.NewReader(conn) + for { + resp, err := readResp(r) + if err != nil { + if err == io.EOF { + return + } + log.Panicln(err) + } + log.Println("<<< ", resp) + } + defer func() { + done<-true + }() + }() + + log.Println(conn) + + err = gorcon.WriteCommandString(conn, gorcon.SERVERDATA_AUTH, "passwrd") + if err != nil { + log.Panicln(err) + } + + log.Println("waiting...") + <-done + log.Println("leaving...") +}