1
0
Protocol/stream_factory.go
2025-09-02 12:30:36 -05:00

55 lines
1.3 KiB
Go

package eq2net
import (
"fmt"
"sync"
)
// StreamFactory provides a factory pattern for creating streams
type StreamFactory struct {
servers map[StreamType]*StreamServer
serversMu sync.RWMutex
}
// NewStreamFactory creates a new stream factory
func NewStreamFactory() *StreamFactory {
return &StreamFactory{
servers: make(map[StreamType]*StreamServer),
}
}
// CreateServer creates a new stream server
func (f *StreamFactory) CreateServer(streamType StreamType, address string, port int) (*StreamServer, error) {
f.serversMu.Lock()
defer f.serversMu.Unlock()
// Check if server already exists for this type
if _, exists := f.servers[streamType]; exists {
return nil, fmt.Errorf("server already exists for stream type %d", streamType)
}
// Create new server
server := NewStreamServer(address, port, streamType)
f.servers[streamType] = server
return server, nil
}
// GetServer returns a server by stream type
func (f *StreamFactory) GetServer(streamType StreamType) *StreamServer {
f.serversMu.RLock()
defer f.serversMu.RUnlock()
return f.servers[streamType]
}
// StopAll stops all servers
func (f *StreamFactory) StopAll() {
f.serversMu.Lock()
defer f.serversMu.Unlock()
for _, server := range f.servers {
server.Stop()
}
f.servers = make(map[StreamType]*StreamServer)
}