This commit is contained in:
parent
6787c729e8
commit
807d7a67c9
|
@ -65,7 +65,7 @@ func (slf *Lockstep[ClientID, Command]) StartBroadcast() {
|
||||||
frames := slf.frames.Map()
|
frames := slf.frames.Map()
|
||||||
for clientId, client := range slf.clients.Map() {
|
for clientId, client := range slf.clients.Map() {
|
||||||
for i := slf.clientCurrentFrame[clientId]; i <= currentFrame; i++ {
|
for i := slf.clientCurrentFrame[clientId]; i <= currentFrame; i++ {
|
||||||
if err := client.Send(slf.serialization(i, frames[i])); err != nil {
|
if err := client.SyncSend(slf.serialization(i, frames[i])); err != nil {
|
||||||
log.Error("Lockstep.StartBroadcast", zap.Any("ClientID", client.GetID()), zap.Int("Frame", i), zap.Error(err))
|
log.Error("Lockstep.StartBroadcast", zap.Any("ClientID", client.GetID()), zap.Int("Frame", i), zap.Error(err))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,11 @@ func (slf *Player[ID]) Send(packet []byte, messageType ...int) {
|
||||||
slf.conn.Write(packet, messageType...)
|
slf.conn.Write(packet, messageType...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SyncSend 向该玩家同步发送数据
|
||||||
|
func (slf *Player[ID]) SyncSend(packet []byte, messageType ...int) error {
|
||||||
|
return slf.conn.SyncWrite(packet, messageType...)
|
||||||
|
}
|
||||||
|
|
||||||
// Close 关闭玩家
|
// Close 关闭玩家
|
||||||
func (slf *Player[ID]) Close() {
|
func (slf *Player[ID]) Close() {
|
||||||
slf.conn.Close()
|
slf.conn.Close()
|
||||||
|
|
|
@ -7,6 +7,8 @@ type Player[ID comparable] interface {
|
||||||
// Send 发送数据包
|
// Send 发送数据包
|
||||||
// - messageType: websocket模式中指定消息类型
|
// - messageType: websocket模式中指定消息类型
|
||||||
Send(packet []byte, messageType ...int)
|
Send(packet []byte, messageType ...int)
|
||||||
|
// SyncSend 同步发送数据包
|
||||||
|
SyncSend(packet []byte, messageType ...int) error
|
||||||
// Close 关闭玩家并且释放其资源
|
// Close 关闭玩家并且释放其资源
|
||||||
Close()
|
Close()
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,29 @@ func (slf *Conn) Write(data []byte, messageType ...int) {
|
||||||
slf.mutex.Unlock()
|
slf.mutex.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *Conn) SyncWrite(data []byte, messageType ...int) error {
|
||||||
|
if slf.server.network == NetworkWebsocket {
|
||||||
|
if len(messageType) > 0 {
|
||||||
|
return slf.ws.WriteMessage(messageType[0], data)
|
||||||
|
} else {
|
||||||
|
return slf.ws.WriteMessage(slf.server.websocketWriteMessageType, data)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if slf.gn != nil {
|
||||||
|
switch slf.server.network {
|
||||||
|
case NetworkUdp, NetworkUdp4, NetworkUdp6:
|
||||||
|
return slf.gn.SendTo(data)
|
||||||
|
default:
|
||||||
|
return slf.gn.AsyncWrite(data)
|
||||||
|
}
|
||||||
|
} else if slf.kcp != nil {
|
||||||
|
_, err := slf.kcp.Write(data)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Close 关闭连接
|
// Close 关闭连接
|
||||||
func (slf *Conn) Close() {
|
func (slf *Conn) Close() {
|
||||||
slf.mutex.Lock()
|
slf.mutex.Lock()
|
||||||
|
@ -192,7 +215,13 @@ func (slf *Conn) writeLoop() {
|
||||||
err = slf.ws.WriteMessage(data.websocketMessageType, data.packet)
|
err = slf.ws.WriteMessage(data.websocketMessageType, data.packet)
|
||||||
} else {
|
} else {
|
||||||
if slf.gn != nil {
|
if slf.gn != nil {
|
||||||
err = slf.gn.AsyncWrite(data.packet)
|
switch slf.server.network {
|
||||||
|
case NetworkUdp, NetworkUdp4, NetworkUdp6:
|
||||||
|
err = slf.gn.SendTo(data.packet)
|
||||||
|
default:
|
||||||
|
err = slf.gn.AsyncWrite(data.packet)
|
||||||
|
}
|
||||||
|
|
||||||
} else if slf.kcp != nil {
|
} else if slf.kcp != nil {
|
||||||
_, err = slf.kcp.Write(data.packet)
|
_, err = slf.kcp.Write(data.packet)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue