test
This commit is contained in:
126
packet.go
Normal file
126
packet.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
const (
|
||||
AdminPacketAdminJoin uint8 = 0
|
||||
AdminPacketAdminQuit
|
||||
AdminPacketAdminUpdateFrequency
|
||||
AdminPacketAdminPoll
|
||||
AdminPacketAdminChat
|
||||
AdminPacketAdminRCon
|
||||
AdminPacketAdminGamescript
|
||||
AdminPacketAdminPing
|
||||
AdminPacketServerFull = 100
|
||||
AdminPacketServerBanned
|
||||
AdminPacketServerError
|
||||
AdminPacketServerProtocol
|
||||
AdminPacketServerWelcome
|
||||
AdminPacketServerNewgame
|
||||
AdminPacketServerShutdown
|
||||
AdminPacketServerDate
|
||||
AdminPacketServerClientJoin
|
||||
AdminPacketServerClientInfo
|
||||
AdminPacketServerClientUpdate
|
||||
AdminPacketServerClientQuit
|
||||
AdminPacketServerClientError
|
||||
AdminPacketServerCompanyNew
|
||||
AdminPacketServerCompanyInfo
|
||||
AdminPacketServerCompanyUpdate
|
||||
AdminPacketServerCompanyRemove
|
||||
AdminPacketServerCompanyEconomy
|
||||
AdminPacketServerCompanyStats
|
||||
AdminPacketServerChat
|
||||
AdminPacketServerRCon
|
||||
AdminPacketServerConsole
|
||||
AdminPacketServerCmdNames
|
||||
AdminPacketServerCmdLogging
|
||||
AdminPacketServerGamescript
|
||||
AdminPacketServerRConEnd
|
||||
AdminPacketServerPong
|
||||
InvalidAdminPacket = 0xFF
|
||||
)
|
||||
|
||||
type Packet struct {
|
||||
PLength uint16
|
||||
PType uint8
|
||||
}
|
||||
|
||||
type PacketAdminJoin struct {
|
||||
Packet
|
||||
Password string
|
||||
AppName string
|
||||
AppVersion string
|
||||
}
|
||||
|
||||
type PacketAdminServerProtocol struct {
|
||||
Packet
|
||||
ProtocolVersion uint8
|
||||
FurtherData bool
|
||||
UpdatePacketType uint16
|
||||
FrequenciesAllowed uint16
|
||||
}
|
||||
|
||||
type PacketAdminServerWelcome struct {
|
||||
Packet
|
||||
ServerName string
|
||||
OpenTTDVersion string
|
||||
Dedicated bool
|
||||
MapName string
|
||||
MapSeed uint32
|
||||
MapLandscape uint8
|
||||
MapStartDate uint32
|
||||
MapX uint16
|
||||
MapY uint16
|
||||
}
|
||||
|
||||
func (p *PacketAdminJoin) Bytes() []byte {
|
||||
buf := new(bytes.Buffer)
|
||||
p.PLength = uint16(len(p.Password) + len(p.AppName) + len(p.AppVersion) + 6)
|
||||
|
||||
binary.Write(buf, binary.LittleEndian, p.PLength)
|
||||
binary.Write(buf, binary.LittleEndian, p.PType)
|
||||
buf.WriteString(p.Password)
|
||||
buf.WriteByte(0)
|
||||
buf.WriteString(p.AppName)
|
||||
buf.WriteByte(0)
|
||||
buf.WriteString(p.AppVersion)
|
||||
buf.WriteByte(0)
|
||||
|
||||
return buf.Bytes()
|
||||
}
|
||||
|
||||
func (p *AdminPacketServerWelcome) Read(b []byte) {
|
||||
r := bufio.NewReader(bytes.NewReader(b))
|
||||
p.ServerName, _ = r.ReadString(0)
|
||||
p.OpenTTDVersion, _ = r.ReadString(0)
|
||||
c, _ := r.ReadByte()
|
||||
p.Dedicated = bool(c)
|
||||
p.MapName, _ = r.ReadString(0)
|
||||
bs := make([]byte, 13)
|
||||
_, _ = r.Read(bs)
|
||||
p.MapSeed = binary.LittleEndian.Uint32(bs[0:])
|
||||
p.MapLandscape = uint8(bs[4:1])
|
||||
p.MapStartDate = binary.LittleEndian.Uint32(bs[5:])
|
||||
p.MapX = binary.LittleEndian.Uint16(bs[9:])
|
||||
p.MapY = binary.LittleEndian.Uint16(bs[11:])
|
||||
}
|
||||
|
||||
func handlePacket(p Packet, b []byte) {
|
||||
switch p.PType {
|
||||
case AdminPacketServerProtocol:
|
||||
case AdminPacketServerWelcome:
|
||||
sp := PacketAdminServerWelcome{
|
||||
PLength: p.PLength,
|
||||
PType: p.PType,
|
||||
}
|
||||
sp.Read(b)
|
||||
logInfoDebug("AdminPacketServerWelcome : %v", sp)
|
||||
default:
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user