@@ 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...")
+}