able to establish connection to trackmania server

This commit is contained in:
fanyx 2021-04-08 23:02:56 +02:00
parent 58499493d8
commit 54d86fd1df
3 changed files with 56 additions and 40 deletions

View File

@ -2,7 +2,7 @@ package main
import ( import (
"git.fanyx.xyz/fanyx/goufy/pkg/config" "git.fanyx.xyz/fanyx/goufy/pkg/config"
"git.fanyx.xyz/fanyx/goufy/pkg/connection" "git.fanyx.xyz/fanyx/goufy/pkg/gbxremote"
) )
func main() { func main() {
@ -10,8 +10,10 @@ func main() {
var conf config.AppConfig var conf config.AppConfig
conf.ReadConfig() conf.ReadConfig()
//initiate connection to trackmania server //fmt.Printf("%#v\n", conf)
var client connection.GbxClient
// initial connection to trackmania server
var client gbxremote.GbxClient
client.Connect(conf) client.Connect(conf)
} }

View File

@ -1,37 +0,0 @@
package connection
import (
"fmt"
"log"
"net"
"strconv"
"git.fanyx.xyz/fanyx/goufy/pkg/config"
)
type GbxClient struct {
conn net.Conn
reqHandle int
}
func (client *GbxClient) Connect(c config.AppConfig) {
// create connection string from config
gbxConnString := c.Trackmania.Host + strconv.FormatInt(int64(c.Trackmania.Port), 10)
var err error
//initiate GbxClient
client.conn, err = net.Dial("tcp", gbxConnString)
if err != nil {
log.Fatal(err)
}
defer client.conn.Close()
// handshake
buf := make([]byte, 4)
_, err = client.conn.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Println("read content:", buf)
}

View File

@ -0,0 +1,51 @@
package gbxremote
import (
"encoding/binary"
"log"
"net"
"strconv"
"git.fanyx.xyz/fanyx/goufy/pkg/config"
)
type GbxClient struct {
conn net.Conn
reqHandle int
}
func (client *GbxClient) Connect(c config.AppConfig) {
// create connection string from config
gbxConnString := c.Trackmania.Host + ":" + strconv.FormatInt(int64(c.Trackmania.Port), 10)
var err error
//initiate GbxClient
client.conn, err = net.Dial("tcp", gbxConnString)
if err != nil {
log.Fatal(err)
}
defer client.conn.Close()
// handshake
buf := make([]byte, 4)
_, err = client.conn.Read(buf)
if err != nil {
log.Fatal(err)
}
// read handshake length
len := binary.LittleEndian.Uint32(buf)
// break handshake if length over 64
if len > 64 {
log.Fatal("Handshake is not GBXRemote")
}
// otherwise continue to read protocol string
buf = make([]byte, len)
_, err = client.conn.Read(buf)
p := string(buf[:])
if p != "GBXRemote 2" {
log.Fatal("Protocol not GBXRemote 2")
}
log.Println("Connection established successfully!")
}