初始化提交

This commit is contained in:
2025-07-09 03:03:01 +08:00
commit e5e02d2430
15 changed files with 1237 additions and 0 deletions

30
util/strings.go Normal file
View File

@ -0,0 +1,30 @@
package util
import "math/rand"
const (
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
number = "0123456789"
alphanumeric = alphabet + number
)
func RandStringAlphaNumeric(length int) (str string) {
for i := 0; i < length; i++ {
str += string(alphanumeric[rand.Intn(len(alphanumeric))])
}
return
}
func RandStringAlphabet(length int) (str string) {
for i := 0; i < length; i++ {
str += string(alphabet[rand.Intn(len(alphabet))])
}
return
}
func RandStringNumber(length int) (str string) {
for i := 0; i < length; i++ {
str += string(number[rand.Intn(len(number))])
}
return
}

76
util/ws/websocket.go Normal file
View File

@ -0,0 +1,76 @@
package ws
import "github.com/gorilla/websocket"
type Packet struct {
isBinary bool
data []byte
}
func Text(buf []byte) *Packet {
return &Packet{
isBinary: false,
data: buf,
}
}
func Binary(buf []byte) *Packet {
return &Packet{
isBinary: true,
data: buf,
}
}
type Conn struct {
WriteChan chan *Packet
ReadChan chan []byte
conn *websocket.Conn
close bool
}
func Wrap(conn *websocket.Conn) *Conn {
return &Conn{
WriteChan: make(chan *Packet),
ReadChan: make(chan []byte),
conn: conn,
}
}
func (conn *Conn) ReadLoop() {
for !conn.close {
_, message, err := conn.conn.ReadMessage()
if err != nil {
break
}
conn.ReadChan <- message
}
}
func (conn *Conn) WriteLoop() {
for {
select {
case message := <-conn.WriteChan:
typ := websocket.TextMessage
if message.isBinary {
typ = websocket.BinaryMessage
}
err := conn.conn.WriteMessage(typ, message.data)
if err != nil {
break
}
default:
if conn.close {
return
}
}
}
}
func (conn *Conn) Close() error {
conn.close = true
return conn.conn.Close()
}
func (conn *Conn) IsClosed() bool {
return conn.close
}