Make it easier to extract strings, and pull more data out of the welcome packet.
This commit is contained in:
parent
207d5b32e0
commit
3e8ccf3df1
@ -20,7 +20,15 @@ import (
|
|||||||
// OpenTTDServer - an object representing the server connection
|
// OpenTTDServer - an object representing the server connection
|
||||||
type OpenTTDServer struct {
|
type OpenTTDServer struct {
|
||||||
connection net.Conn
|
connection net.Conn
|
||||||
serverName string
|
ServerName string
|
||||||
|
ServerVersion string
|
||||||
|
ServerDedicated bool // is this a dedicated server?
|
||||||
|
MapName string
|
||||||
|
MapSeed uint32
|
||||||
|
MapLandscape byte
|
||||||
|
MapX uint16
|
||||||
|
MapY uint16
|
||||||
|
|
||||||
rconDaily []string
|
rconDaily []string
|
||||||
rconMonthly []string
|
rconMonthly []string
|
||||||
rconYearly []string
|
rconYearly []string
|
||||||
@ -296,8 +304,28 @@ SocketLoop:
|
|||||||
// fmt.Print(" - Got a adminPacketServerPROTOCOL packet\n")
|
// fmt.Print(" - Got a adminPacketServerPROTOCOL packet\n")
|
||||||
} else if packetType == adminPacketServerWELCOME {
|
} else if packetType == adminPacketServerWELCOME {
|
||||||
log.Println("received welcome packet")
|
log.Println("received welcome packet")
|
||||||
server.serverName = extractString(packetData[0:])
|
fmt.Printf("packet: %+v?\n", packetData[:])
|
||||||
// fmt.Printf(" * server name: %s\n", serverName)
|
var next int
|
||||||
|
server.ServerName, next = extractString(packetData[:], 0)
|
||||||
|
server.ServerVersion, next = extractString(packetData[:], next)
|
||||||
|
if (packetData[next] == 0000) {
|
||||||
|
server.ServerDedicated = false
|
||||||
|
} else if (packetData[next] == 0001) {
|
||||||
|
server.ServerDedicated = true
|
||||||
|
} else {
|
||||||
|
fmt.Printf("not bool %v?\n", packetData[next])
|
||||||
|
}
|
||||||
|
server.MapName, next = extractString(packetData[:], next+1)
|
||||||
|
server.MapSeed = binary.LittleEndian.Uint32(packetData[next:next+4])
|
||||||
|
server.MapLandscape = packetData[next+4]
|
||||||
|
// todo
|
||||||
|
// p->Send_uint32(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
|
||||||
|
server.MapX = binary.LittleEndian.Uint16(packetData[next+9:next+11])
|
||||||
|
server.MapY = binary.LittleEndian.Uint16(packetData[next+11:next+13])
|
||||||
|
|
||||||
|
log.Printf("server: %s version: %s dedicated: %v map: %s %d/%d size\n", server.ServerName, server.ServerVersion, server.ServerDedicated, server.MapName, server.MapX, server.MapY)
|
||||||
|
|
||||||
|
// fmt.Printf(" * server name: %s\n", ServerName)
|
||||||
} else if packetType == adminPacketServerSHUTDOWN {
|
} else if packetType == adminPacketServerSHUTDOWN {
|
||||||
log.Println("server shutting down - will try to reconnect")
|
log.Println("server shutting down - will try to reconnect")
|
||||||
server.connection = nil
|
server.connection = nil
|
||||||
@ -318,16 +346,17 @@ SocketLoop:
|
|||||||
chatAction := int8(packetData[0])
|
chatAction := int8(packetData[0])
|
||||||
chatDestType := int8(packetData[1])
|
chatDestType := int8(packetData[1])
|
||||||
chatClientID := binary.LittleEndian.Uint32(packetData[2:6])
|
chatClientID := binary.LittleEndian.Uint32(packetData[2:6])
|
||||||
chatMsg := extractString(packetData[6:])
|
// var chatMsg string
|
||||||
|
chatMsg, _ := extractString(packetData[:], 6)
|
||||||
chatData := binary.LittleEndian.Uint64(packetData[len(packetData)-8:])
|
chatData := binary.LittleEndian.Uint64(packetData[len(packetData)-8:])
|
||||||
log.Printf("chat message: action %v desttype %v, client id %v msg %v data %v\n", chatAction, chatDestType, chatClientID, string(chatMsg), chatData)
|
log.Printf("chat message: action %v desttype %v, client id %v msg %v data %v\n", chatAction, chatDestType, chatClientID, string(chatMsg), chatData)
|
||||||
} else if packetType == adminPacketServerRCON {
|
} else if packetType == adminPacketServerRCON {
|
||||||
colour := binary.LittleEndian.Uint16(packetData[0:2])
|
colour := binary.LittleEndian.Uint16(packetData[0:2])
|
||||||
string := extractString(packetData[2:])
|
rconRecvString, _ := extractString(packetData[:], 2)
|
||||||
log.Printf("rcon: colour %v : %s\n", colour, string)
|
log.Printf("rcon: colour %v : %s\n", colour, rconRecvString)
|
||||||
} else if packetType == adminPacketServerRCON_END {
|
} else if packetType == adminPacketServerRCON_END {
|
||||||
string := extractString(packetData[0:])
|
rconEndRecvString, _ := extractString(packetData[:], 0)
|
||||||
log.Printf("rcon end : %s\n", string)
|
log.Printf("rcon end : %s\n", rconEndRecvString)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("unknown packet received from server: %v [%v]\n", string(packetData), packetData)
|
log.Printf("unknown packet received from server: %v [%v]\n", string(packetData), packetData)
|
||||||
}
|
}
|
||||||
@ -348,13 +377,13 @@ SocketLoop:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractString(bytes []byte) string {
|
func extractString(bytes []byte, start int) (string, int) {
|
||||||
var str []byte
|
var buildString []byte
|
||||||
for i := 0; i <= len(bytes); i++ {
|
for i := start; i <= len(bytes); i++ {
|
||||||
if bytes[i] == 0 {
|
if bytes[i] == 0 {
|
||||||
return string(str)
|
return string(buildString), i+1
|
||||||
}
|
}
|
||||||
str = append(str, bytes[i])
|
buildString = append(buildString, bytes[i])
|
||||||
}
|
}
|
||||||
return ""
|
return "", -1
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user