70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
// NewBot 创建一个机器人,目前仅支持 Socket 服务器
|
|
func NewBot(srv *Server, options ...BotOption) *Bot {
|
|
if !srv.IsSocket() {
|
|
panic(fmt.Errorf("server type[%s] is not socket", srv.network))
|
|
}
|
|
bot := &Bot{
|
|
conn: newBotConn(srv),
|
|
}
|
|
for _, option := range options {
|
|
option(bot)
|
|
}
|
|
return bot
|
|
}
|
|
|
|
type Bot struct {
|
|
conn *Conn
|
|
joined atomic.Bool
|
|
}
|
|
|
|
// JoinServer 加入服务器
|
|
func (slf *Bot) JoinServer() {
|
|
if slf.joined.Swap(true) {
|
|
slf.conn.server.OnConnectionClosedEvent(slf.conn, nil)
|
|
}
|
|
slf.conn.server.OnConnectionOpenedEvent(slf.conn)
|
|
}
|
|
|
|
// LeaveServer 离开服务器
|
|
func (slf *Bot) LeaveServer() {
|
|
if slf.joined.Swap(false) {
|
|
slf.conn.server.OnConnectionClosedEvent(slf.conn, nil)
|
|
}
|
|
}
|
|
|
|
// SetNetworkDelay 设置网络延迟和波动范围
|
|
// - delay 延迟
|
|
// - fluctuation 波动范围
|
|
func (slf *Bot) SetNetworkDelay(delay, fluctuation time.Duration) {
|
|
slf.conn.delay = delay
|
|
slf.conn.fluctuation = fluctuation
|
|
}
|
|
|
|
// SetWriter 设置写入器
|
|
func (slf *Bot) SetWriter(writer io.Writer) {
|
|
slf.conn.botWriter.Store(&writer)
|
|
}
|
|
|
|
// SendPacket 发送数据包到服务器
|
|
func (slf *Bot) SendPacket(packet []byte) {
|
|
if slf.conn.server.IsOnline(slf.conn.GetID()) {
|
|
slf.conn.server.PushPacketMessage(slf.conn, 0, packet)
|
|
}
|
|
}
|
|
|
|
// SendWSPacket 发送 WebSocket 数据包到服务器
|
|
func (slf *Bot) SendWSPacket(wst int, packet []byte) {
|
|
if slf.conn.server.IsOnline(slf.conn.GetID()) {
|
|
slf.conn.server.PushPacketMessage(slf.conn, wst, packet)
|
|
}
|
|
}
|