mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-10-06 14:09:06 +00:00
37 lines
813 B
Go
37 lines
813 B
Go
package pubsub
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// Publish publishes a message to a topic
|
|
func (m *Manager) Publish(ctx context.Context, topic string, data []byte) error {
|
|
if m.pubsub == nil {
|
|
return fmt.Errorf("pubsub not initialized")
|
|
}
|
|
|
|
// Determine namespace (allow per-call override via context)
|
|
ns := m.namespace
|
|
if v := ctx.Value(CtxKeyNamespaceOverride); v != nil {
|
|
if s, ok := v.(string); ok && s != "" {
|
|
ns = s
|
|
}
|
|
}
|
|
|
|
namespacedTopic := fmt.Sprintf("%s.%s", ns, topic)
|
|
|
|
// Get or create topic
|
|
libp2pTopic, err := m.getOrCreateTopic(namespacedTopic)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to get topic for publishing: %w", err)
|
|
}
|
|
|
|
// Publish message
|
|
if err := libp2pTopic.Publish(ctx, data); err != nil {
|
|
return fmt.Errorf("failed to publish message: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|