1 Star 0 Fork 0

似是故人来/v8go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
client_connect.go 1.12 KB
一键复制 编辑 原始数据 按行查看 历史
似是故人来 提交于 2024-11-03 23:53 . inspector
package v8go
import (
"context"
"fmt"
"golang.org/x/net/websocket"
)
type ClientConnection struct {
Connection *websocket.Conn
ctx context.Context
cancel context.CancelFunc
ProcessFun func(connection *ClientConnection, data []byte)
}
func NewClientConnection(parentCtx context.Context, conn *websocket.Conn, procss func(connection *ClientConnection, data []byte)) (*ClientConnection, context.Context) {
ctx, cancel := context.WithCancel(parentCtx)
c := &ClientConnection{
Connection: conn,
ctx: ctx,
cancel: cancel,
ProcessFun: procss,
}
go c.Run()
return c, ctx
}
func (c *ClientConnection) Stop() {
c.cancel()
}
func (c *ClientConnection) Run() {
defer c.cancel()
defer func() {
fmt.Println("connection closed")
_ = c.Connection.Close()
}()
go c.readLoop()
select {
case <-c.ctx.Done():
return
}
}
func (c *ClientConnection) readLoop() {
defer c.cancel()
for {
select {
case <-c.ctx.Done():
return
default:
data2 := make([]byte, 4096)
err := websocket.Message.Receive(c.Connection, &data2)
if err != nil {
return
}
c.ProcessFun(c, data2)
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/hasika/v8go.git
git@gitee.com:hasika/v8go.git
hasika
v8go
v8go
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385