55 lines
1.3 KiB
Go
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)
|
|
}
|