74 lines
2 KiB
Go
74 lines
2 KiB
Go
package messages7
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"github.com/teeworlds-go/go-teeworlds-protocol/chunk7"
|
|
"github.com/teeworlds-go/go-teeworlds-protocol/network7"
|
|
"github.com/teeworlds-go/go-teeworlds-protocol/packer"
|
|
)
|
|
|
|
type Info struct {
|
|
ChunkHeader *chunk7.ChunkHeader
|
|
|
|
// The official name is "NetVersion" but a more fitting name in my opinion would be "Protocol Version".
|
|
// The variable C++ implementations GAME_NETVERSION always expands to "0.7 802f1be60a05665f"
|
|
// If the server gets another string it actually rejects the connection. This is what prohibits 0.6 clients to join 0.7 servers.
|
|
//
|
|
// Recommended value is network7.NetVersion
|
|
Version string
|
|
|
|
// Password to enter password protected servers
|
|
// If the server does not require a password it will ignore this string
|
|
//
|
|
// Recommended value is ""
|
|
Password string
|
|
|
|
// Another version field which does not have to match the servers version to establish a connection.
|
|
// The first version field makes sure that client and server use the same major protocol and are compatible.
|
|
// This "Client Version" field then informs the server about the clients minor version.
|
|
// The server can use it to activate some non protocol breaking features that were introduced in minor releases.
|
|
//
|
|
// The official teeworlds 0.7.5 client sends the value 0x0705
|
|
// So the recommended value is network7.ClientVersion
|
|
ClientVersion int
|
|
}
|
|
|
|
func (msg Info) MsgId() int {
|
|
return network7.MsgSysInfo
|
|
}
|
|
|
|
func (info Info) MsgType() network7.MsgType {
|
|
return network7.TypeNet
|
|
}
|
|
|
|
func (msg Info) System() bool {
|
|
return true
|
|
}
|
|
|
|
func (msg Info) Vital() bool {
|
|
return true
|
|
}
|
|
|
|
func (msg Info) Pack() []byte {
|
|
return slices.Concat(
|
|
packer.PackStr(msg.Version),
|
|
packer.PackStr(msg.Password),
|
|
packer.PackInt(msg.ClientVersion),
|
|
)
|
|
}
|
|
|
|
func (msg *Info) Unpack(u *packer.Unpacker) {
|
|
msg.Version = u.GetString()
|
|
msg.Password = u.GetString()
|
|
msg.ClientVersion = u.GetInt()
|
|
}
|
|
|
|
func (msg *Info) Header() *chunk7.ChunkHeader {
|
|
return msg.ChunkHeader
|
|
}
|
|
|
|
func (msg *Info) SetHeader(header *chunk7.ChunkHeader) {
|
|
msg.ChunkHeader = header
|
|
}
|