grcon/grcon_examples_test.go

114 lines
2.6 KiB
Go

package grcon_test
import (
"log"
"net"
"github.com/hamburghammer/grcon"
)
func ExampleRemoteConsole_Read() {
conn, err := net.Dial("tcp", "127.0.0.1:12345")
if err != nil {
log.Fatalf("establishing connection failed: %s", err.Error())
}
defer conn.Close()
remoteConsole := grcon.NewRemoteConsole(conn)
packet, err := remoteConsole.Read()
if err != nil {
log.Fatalf("reading packet failed: %s", err.Error())
}
log.Printf("new packet read:\nid: %d\ntype: %d\nbody: %s\n", packet.Id, packet.Type, string(packet.Body))
}
func ExampleRemoteConsole_Write() {
conn, err := net.Dial("tcp", "127.0.0.1:12345")
if err != nil {
log.Fatalf("establishing connection failed: %s", err.Error())
}
defer conn.Close()
remoteConsole := grcon.NewRemoteConsole(conn)
packet := grcon.Packet{
Id: 1,
Type: grcon.SERVERDATA_EXECCOMMAND,
Body: []byte("foo"),
}
err = remoteConsole.Write(packet)
if err != nil {
log.Fatalf("writing packet failed: %s", err.Error())
}
}
func ExampleRemoteConsole() {
conn, err := net.Dial("tcp", "127.0.0.1:12345")
if err != nil {
log.Fatalf("establishing connection failed: %s", err.Error())
}
defer conn.Close()
remoteConsole := grcon.NewRemoteConsole(conn)
// authenticated connection.
authPacket := grcon.Packet{
Id: 1,
Type: grcon.SERVERDATA_AUTH,
Body: []byte("password"),
}
err = remoteConsole.Write(authPacket)
authResponsePacket, err := remoteConsole.Read()
if err != nil {
log.Fatalf("auth failed: %s", err.Error())
}
if authResponsePacket.Id == -1 {
log.Fatal("auth failed: auth rejected password invalid")
}
// packet that contains the command to execute
cmdPacket := grcon.Packet{
Id: 2,
Type: grcon.SERVERDATA_EXECCOMMAND,
Body: []byte("foo"),
}
err = remoteConsole.Write(cmdPacket)
if err != nil {
log.Fatalf("writing packet failed: %s", err.Error())
}
// empty packet that the server should mirror to indicate the end of the previous executed command.
endPacket := grcon.Packet{
Id: 3,
Type: grcon.SERVERDATA_RESPONSE_VALUE,
Body: []byte(""),
}
err = remoteConsole.Write(cmdPacket)
if err != nil {
log.Fatalf("writing packet failed: %s", err.Error())
}
responsePackets := make([]grcon.Packet, 0, 1)
// read until endPacket is reached.
for {
packet, err := remoteConsole.Read()
if err != nil {
log.Fatalf("reading packet failed: %s", err.Error())
}
if packet.Id == endPacket.Id {
break
}
responsePackets = append(responsePackets, packet)
}
var response string
for _, packet := range responsePackets {
response += string(packet.Body)
}
log.Println(response)
}