# README
kovey network by golang
Description
This is a network library with golang
Usage
go get -u github.com/kovey/network-go
Example Server
package main
import (
"github.com/kovey/network-go/connection"
"github.com/kovey/network-go/example"
"github.com/kovey/network-go/server"
"encoding/json"
)
func main() {
config := server.Config{}
packet := connection.PacketConfig{}
packet.HeaderLength = 4
packet.BodyLenOffset = 0
packet.BodyLenLen = 4
config.PConfig = packet
config.Host = "127.0.0.1"
config.Port = 9911
serv := server.NewServer(config)
serv.SetService(server.NewTcpService(1024))
serv.SetHandler(&Handler{})
serv.Run()
}
type Handler struct {
}
func (h *Handler) Connect(conn connection.IConnection) error {
fmt.Printf("new connection[%d]\n", conn.FD())
return nil
}
func (h *Handler) Receive(context *server.Context) error {
fmt.Printf("%+v\n", context.Pack())
fmt.Printf("connection[%d]", context.Connection().FD())
context.Connection().Write(context.Pack())
return nil
}
func (h *Handler) Close(conn connection.IConnection) error {
fmt.Printf("connection[%d] close \n", conn.FD())
return nil
}
func (h *Handler) Packet(buf []byte) (connection.IPacket, error) {
p := &Packet{}
err := p.Unserialize(buf[4:])
if err != nil {
return nil, err
}
return p, nil
}
type Packet struct {
Action int `json:"action"`
Name string `json:"name"`
Age int `json:"age"`
}
func (p *Packet) Serialize() []byte {
info, err := json.Marshal(p)
if err != nil {
return nil
}
return append(connection.Int32ToBytes(int32(len(info))), info...)
}
func (p *Packet) Unserialize(buf []byte) error {
return json.Unmarshal(buf, p)
}
Example Client
package main
import (
"github.com/kovey/network-go/client"
"github.com/kovey/network-go/connection"
"github.com/kovey/network-go/example"
"encoding/json"
)
func main() {
cli := client.NewClient(connection.PacketConfig{HeaderLength: 4, BodyLenOffset: 0, BodyLenLen: 4})
cli.SetService(client.NewTcp())
cli.SetHandler(&Handler{})
err := cli.Dial("127.0.0.1", 9911)
if err != nil {
panic(err)
}
pack := &Packet{}
pack.Action = 1000
pack.Name = "kovey"
pack.Age = 18
cli.Send(pack)
cli.Loop()
}
type Handler struct {
}
func (h *Handler) Packet(buf []byte) (connection.IPacket, error) {
p := &Packet{}
err := p.Unserialize(buf[4:])
if err != nil {
return nil, err
}
return p, nil
}
func (h *Handler) Receive(pack connection.IPacket, cli *client.Client) error {
fmt.Printf("%+v\n", pack)
time.AfterFunc(10*time.Second, func() {
cli.Send(pack)
})
return nil
}
func (h *Handler) Idle(cli *client.Client) error {
return nil
}
func (h *Handler) Try(cli *client.Client) bool {
return false
}
type Packet struct {
Action int `json:"action"`
Name string `json:"name"`
Age int `json:"age"`
}
func (p *Packet) Serialize() []byte {
info, err := json.Marshal(p)
if err != nil {
return nil
}
return append(connection.Int32ToBytes(int32(len(info))), info...)
}
func (p *Packet) Unserialize(buf []byte) error {
return json.Unmarshal(buf, p)
}
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author