gwnet

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 6, 2022 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Upgrader = websocket.Upgrader{
		ReadBufferSize:    4096,
		WriteBufferSize:   4096,
		EnableCompression: true,
		CheckOrigin: func(r *http.Request) bool {
			return true
		},
	}
	GlobalServer gwiface.Server
)

Functions

func NewDataPack

func NewDataPack() gwiface.Packet

func NewServer

func NewServer(opt ...Option) gwiface.Server

NewServer 建立一個Server

func SetConfig

func SetConfig(c *gwiface.Config)

Types

type BaseRouter

type BaseRouter struct{}

BaseRouter 要實現router時,先內崁這個基礎類別,然後根據需要對這個基本類別的function重寫

func (*BaseRouter) Handle

func (br *BaseRouter) Handle(req gwiface.Request)

Handle -

func (*BaseRouter) PostHandle

func (br *BaseRouter) PostHandle(req gwiface.Request)

PostHandle -

func (*BaseRouter) PreHandle

func (br *BaseRouter) PreHandle(req gwiface.Request)

PreHandle -

type ConnManager

type ConnManager struct {
	// contains filtered or unexported fields
}

func NewConnManager

func NewConnManager() *ConnManager

func (*ConnManager) Add

func (connMgr *ConnManager) Add(conn gwiface.Connection)

func (*ConnManager) ClearConn

func (connMgr *ConnManager) ClearConn()

func (*ConnManager) ClearOneConn

func (connMgr *ConnManager) ClearOneConn(connID int64)

func (*ConnManager) Get

func (connMgr *ConnManager) Get(connID int64) (gwiface.Connection, error)

func (*ConnManager) Len

func (connMgr *ConnManager) Len() int

func (*ConnManager) Remove

func (connMgr *ConnManager) Remove(conn gwiface.Connection)

func (*ConnManager) Search

func (connMgr *ConnManager) Search(s gwiface.Search)

type Connection

type Connection struct {
	Server gwiface.Server //這個連線屬於哪一個Server

	Conn *websocket.Conn //本連線的websocket底層結構

	ConnID int64 //ConnectionID可以當成SessionID,應該要唯一的

	MsgHandler gwiface.MsgHandle //管理Msg的處理

	Heartbeat             bool //用來給Timer檢查是否有心跳
	OfflineHeartBeatCount int  //已經累積幾次沒有心跳,超過n次要把他斷線

	sync.RWMutex //讓Connection本身也是一個RWMutex
	// contains filtered or unexported fields
}

Connection

func NewConnection

func NewConnection(s gwiface.Server, conn *websocket.Conn, connID int64, msgHandler gwiface.MsgHandle) *Connection

NewConnection 建立一個新的Connection,有新用戶連上時都會新建

func (*Connection) Context

func (c *Connection) Context() context.Context

Context 回傳ctx,用在自己定義的go routine要把Connection變更狀態

func (*Connection) GetConnID

func (c *Connection) GetConnID() int64

GetConnID 取得ConnectionID

func (*Connection) GetConnection

func (c *Connection) GetConnection() *websocket.Conn

GetConnection 得到內部的socket Conn

func (*Connection) GetPing

func (c *Connection) GetPing() bool

GetPing 檢查是否有HeartBeat

func (*Connection) GetProperty

func (c *Connection) GetProperty(key string) (interface{}, error)

func (*Connection) IsHeartbeatTimeout

func (c *Connection) IsHeartbeatTimeout()

IsHeartbeatTimeout 自己會陷入無限循環,直到GetPing = false 會中斷連線

func (*Connection) RemoteAddr

func (c *Connection) RemoteAddr() net.Addr

RemoteAddr 取得Client的IP

func (*Connection) RemovePing

func (c *Connection) RemovePing()

RemovePing HeartBeat

func (*Connection) RemoveProperty

func (c *Connection) RemoveProperty(key string)

func (*Connection) SendMsg

func (c *Connection) SendMsg(msgID uint32, data []byte) error

SendMsg 送Message給Client

func (*Connection) SetPing

func (c *Connection) SetPing()

SetPing 設定有HeartBeat

func (*Connection) SetProperty

func (c *Connection) SetProperty(key string, value interface{})

func (*Connection) Start

func (c *Connection) Start()

Start 啟動Connection,讓此Connection開始工作

func (*Connection) StartReader

func (c *Connection) StartReader()

StartReader 用來讀Message,取得Message後送給Worker處理

func (*Connection) StartWriter

func (c *Connection) StartWriter()

StartWriter 寫Message出去用的goroutine,主要是送msg給Client

func (*Connection) Stop

func (c *Connection) Stop()

Stop 停止Connection,把此Connection結束

type DataPack

type DataPack struct{}

func (*DataPack) Pack

func (dp *DataPack) Pack(msg gwiface.Message) ([]byte, error)

func (*DataPack) Unpack

func (dp *DataPack) Unpack(binaryData []byte) (gwiface.Message, error)

type Message

type Message struct {
	ID   uint32 `json:"msgId"`
	Data []byte `json:"data"`
}

Message 消息 跟前端實際溝通的內容,msgId用來當type,data是任意struct封裝後的資料

func NewMsgPackage

func NewMsgPackage(ID uint32, data []byte) *Message

NewMsgPackage 建立一個Message物件

func (*Message) GetData

func (msg *Message) GetData() []byte

GetData 取得MessageData

func (*Message) GetMsgID

func (msg *Message) GetMsgID() uint32

GetMsgID 取得MessageID

func (*Message) SetData

func (msg *Message) SetData(data []byte)

SetData 變更一個Message的Data

func (*Message) SetMsgID

func (msg *Message) SetMsgID(msgID uint32)

SetMsgID 變更一個Message的ID

type MsgHandle

type MsgHandle struct {
	Apis           map[uint32]gwiface.Router // 每個MsgID對應的處理方法
	WorkerPoolSize uint32
	TaskQueue      []chan gwiface.Request // Worker負責取任務的Queue
}

MsgHandle -

func NewMsgHandle

func NewMsgHandle() *MsgHandle

func (MsgHandle) AddRouter

func (mh MsgHandle) AddRouter(msgID uint32, router gwiface.Router)

func (MsgHandle) DoMsgHandler

func (mh MsgHandle) DoMsgHandler(request gwiface.Request)

func (MsgHandle) SendMsgToTaskQueue

func (mh MsgHandle) SendMsgToTaskQueue(request gwiface.Request)

func (*MsgHandle) StartOneWorker

func (mh *MsgHandle) StartOneWorker(workerID int, taskQueue chan gwiface.Request)

func (MsgHandle) StartWorkerPool

func (mh MsgHandle) StartWorkerPool()

type Option

type Option func(s *Server)

func WithPacket

func WithPacket(pack gwiface.Packet) Option

type Request

type Request struct {
	// contains filtered or unexported fields
}

Request 請求

func (*Request) GetConnection

func (r *Request) GetConnection() gwiface.Connection

GetConnection 取得connection

func (*Request) GetData

func (r *Request) GetData() []byte

GetData 取得資料

func (*Request) GetMsgID

func (r *Request) GetMsgID() uint32

GetMsgID 取得msgID

type Server

type Server struct {
	ConnMgr gwiface.ConnManager

	OnConnStart func(conn gwiface.Connection)
	OnConnStop  func(conn gwiface.Connection)
	// contains filtered or unexported fields
}

Server interface的實現,定義一個Server的類型

func (*Server) AddRouter

func (s *Server) AddRouter(msgID uint32, router gwiface.Router)

func (*Server) CallOnConnStart

func (s *Server) CallOnConnStart(conn gwiface.Connection)

func (*Server) CallOnConnStop

func (s *Server) CallOnConnStop(conn gwiface.Connection)

func (*Server) GetConnMgr

func (s *Server) GetConnMgr() gwiface.ConnManager

func (*Server) Packet

func (s *Server) Packet() gwiface.Packet

func (*Server) Serve

func (s *Server) Serve(c *gin.Context)

func (*Server) SetOnConnStart

func (s *Server) SetOnConnStart(hookFunc func(gwiface.Connection))

func (*Server) SetOnConnStop

func (s *Server) SetOnConnStop(hookFunc func(gwiface.Connection))

func (*Server) Start

func (s *Server) Start(c *gin.Context)

func (*Server) Stop

func (s *Server) Stop()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL