mux sending
All checks were successful
Build and Publish / BuildAndDeployAmd64 (push) Successful in 27s
Build and Publish / BuildAndDeploy (push) Successful in 2m19s

This commit is contained in:
matst80
2024-11-12 22:35:03 +01:00
parent e1b254668f
commit addec8788f
4 changed files with 14 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/binary"
"fmt"
"log"
"sync"
"time"
)
@@ -29,6 +30,7 @@ func (c *Client) Close() {
type CartTCPClient struct {
*PersistentConnection
sendMux sync.Mutex
ErrorCount int
address string
*CartPacketQueue
@@ -48,6 +50,8 @@ func NewCartTCPClient(address string) (*CartTCPClient, error) {
}
func (m *CartTCPClient) SendPacket(messageType CartMessage, id CartId, data []byte) error {
m.sendMux.Lock()
defer m.sendMux.Unlock()
m.Conn.Write(header[:])
err := binary.Write(m.Conn, binary.LittleEndian, CartPacket{
Version: CurrentPacketVersion,

View File

@@ -37,6 +37,7 @@ func CartListen(address string) (*CartServer, error) {
type TCPCartServerMux struct {
mu sync.RWMutex
sendMux sync.Mutex
listeners map[CartMessage]func(CartId, []byte) error
functions map[CartMessage]func(CartId, []byte) (CartMessage, []byte, error)
}
@@ -68,6 +69,8 @@ func (m *TCPCartServerMux) handleFunction(connection net.Conn, messageType CartM
m.mu.RLock()
fn, ok := m.functions[messageType]
m.mu.RUnlock()
m.sendMux.Lock()
defer m.sendMux.Unlock()
if ok {
responseType, responseData, err := fn(id, data)
connection.Write(header[:])

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"log"
"net"
"sync"
"time"
)
@@ -26,6 +27,7 @@ func Dial(address string) (*Client, error) {
type TCPClient struct {
*PersistentConnection
sendMux sync.Mutex
ErrorCount int
address string
*PacketQueue
@@ -99,6 +101,8 @@ var (
)
func (m *TCPClient) SendPacket(messageType PoolMessage, data []byte) error {
m.sendMux.Lock()
defer m.sendMux.Unlock()
m.Conn.Write(header[:])
err := binary.Write(m.Conn, binary.LittleEndian, Packet{
Version: CurrentPacketVersion,

View File

@@ -37,6 +37,7 @@ func Listen(address string) (*Server, error) {
type TCPServerMux struct {
mu sync.RWMutex
sendMux sync.Mutex
listeners map[PoolMessage]func(data []byte) error
functions map[PoolMessage]func(data []byte) (PoolMessage, []byte, error)
}
@@ -68,6 +69,8 @@ func (m *TCPServerMux) handleFunction(connection net.Conn, messageType PoolMessa
m.mu.RLock()
function, ok := m.functions[messageType]
m.mu.RUnlock()
m.sendMux.Lock()
defer m.sendMux.Unlock()
if ok {
connection.Write(header[:])
responseType, responseData, err := function(data)