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) }