Categorygithub.com/kovey/network-go
module
1.1.0
Repository: https://github.com/kovey/network-go.git
Documentation: pkg.go.dev

# 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