3 Star 0 Fork 0

neuro-netw0rk/server-golib

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
log.go 1.35 KB
一键复制 编辑 原始数据 按行查看 历史
wangxianyu 提交于 2023-07-10 14:18 +08:00 . init project
package ws
import (
"bufio"
"github.com/gorilla/websocket"
"io"
"net/http"
"time"
)
type PodLogSession struct {
wsConn *websocket.Conn
doneChan chan struct{}
ioReadCloser io.ReadCloser
bufReader *bufio.Reader
}
func NewPodLogSession(w http.ResponseWriter, r *http.Request) (*PodLogSession, error) {
upgrader := &websocket.Upgrader{
HandshakeTimeout: time.Second * 10,
CheckOrigin: func(r *http.Request) bool {
return true
},
Subprotocols: []string{r.Header.Get("Sec-WebSocket-Protocol")},
}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return nil, err
}
session := &PodLogSession{
wsConn: conn,
doneChan: make(chan struct{}),
}
return session, nil
}
func (p *PodLogSession) SetReaderCloser(readCloser io.ReadCloser) {
p.ioReadCloser = readCloser
p.bufReader = bufio.NewReader(readCloser)
}
func (p *PodLogSession) Read() {
_, _, err := p.wsConn.ReadMessage()
if err != nil {
close(p.doneChan)
}
}
func (p *PodLogSession) Write() error {
for {
bytes, err := p.bufReader.ReadBytes('\n')
if err != nil {
if err != io.EOF {
return err
}
return err
}
err = p.wsConn.WriteMessage(websocket.TextMessage, bytes)
if err != nil {
return err
}
}
}
func (p *PodLogSession) Close() error {
return p.wsConn.Close()
}
func (p *PodLogSession) Done() chan struct{} {
return p.doneChan
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/neuro-netw0rk/server-golib.git
git@gitee.com:neuro-netw0rk/server-golib.git
neuro-netw0rk
server-golib
server-golib
v0.0.5-beta2

搜索帮助