https://github.com/teeworlds-go/protocol
Teeworlds 0.7 network protocol library
https://github.com/teeworlds-go/protocol
ddnet ddnet-client teeworlds teeworlds-client teeworlds-protocol
Last synced: 7 days ago
JSON representation
Teeworlds 0.7 network protocol library
- Host: GitHub
- URL: https://github.com/teeworlds-go/protocol
- Owner: teeworlds-go
- License: bsd-2-clause
- Created: 2024-06-01T00:27:56.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-09-19T02:53:25.000Z (over 1 year ago)
- Last Synced: 2024-09-19T05:54:45.780Z (over 1 year ago)
- Topics: ddnet, ddnet-client, teeworlds, teeworlds-client, teeworlds-protocol
- Language: Go
- Homepage:
- Size: 335 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# teeworlds 0.7 protocol library for go
A client side network protocol implementation of the game teeworlds.
## high level api for ease of use
The package **teeworlds7** implements a high level client library. Designed for ease of use.
```go
package main
import (
"fmt"
"os"
"github.com/teeworlds-go/protocol/messages7"
"github.com/teeworlds-go/protocol/snapshot7"
"github.com/teeworlds-go/protocol/teeworlds7"
)
func main() {
client := teeworlds7.NewClient()
client.Name = "nameless tee"
// Register your callback for incoming chat messages
// For a full list of all callbacks see: https://github.com/teeworlds-go/protocol/tree/master/teeworlds7/user_hooks.go
client.OnChat(func(msg *messages7.SvChat, defaultAction teeworlds7.DefaultAction) error {
// the default action prints the chat message to the console
// if this is not called and you don't print it your self the chat will not be visible
err := defaultAction()
if err != nil {
return err
}
if msg.Message == "!ping" {
// Send reply in chat using the SendChat() action
// For a full list of all actions see: https://github.com/teeworlds-go/protocol/tree/master/teeworlds7/user_actions.go
return client.SendChat("pong")
}
return nil
})
client.OnSnapshot(func(snap *snapshot7.Snapshot, defaultAction teeworlds7.DefaultAction) error {
fmt.Printf("got snap with %d items\n", len(snap.Items))
for _, character := range client.Game.Snap.Characters {
fmt.Printf(" got tee at %.2f %.2f\n", float32(character.X)/32.0, float32(character.Y)/32.0)
}
char, found, err := client.SnapFindCharacter(client.LocalClientId)
if err != nil {
return err
}
if !found {
return nil
}
fmt.Printf(" we are at %d %d\n", char.X/32, char.Y/32)
client.Right()
return nil
})
err := client.Connect("127.0.0.1", 8303)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
```
Example usages:
- [client_verbose](./examples/client_verbose/) a verbose client show casing the easy to use high level api
- [client_echo](./examples/client_echo/) a simple client echoing messages in chat
- [client_trivia](./examples/client_trivia/) a trivia chat bot
## low level api for power users
The packages **chunk7, messages7, network7, packer, protocol7** Implement the low level 0.7 teeworlds protocol. Use them if you want to build something advanced such as a custom proxy.
## projects using protocol
- [MITM teeworlds proxy](https://github.com/teeworlds-go/proxy)
- [goofworlds gui client](https://github.com/teeworlds-go/goofworlds)