From c626e72951b3bfa047c21b778a970217ca31f9f8 Mon Sep 17 00:00:00 2001
From: a <a@tuxpa.in>
Date: Tue, 29 Aug 2023 18:57:06 -0500
Subject: [PATCH] okg

---
 contrib/extension/subscription/client.go       |  4 ++--
 contrib/extension/subscription/engine.go       |  6 +++---
 contrib/extension/subscription/subscription.go | 18 +++++++++++++-----
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/contrib/extension/subscription/client.go b/contrib/extension/subscription/client.go
index d845d9b..fa89a1a 100644
--- a/contrib/extension/subscription/client.go
+++ b/contrib/extension/subscription/client.go
@@ -68,7 +68,7 @@ func (c *WrapClient) Subscribe(ctx context.Context, namespace string, channel an
 
 	// send the actual message to initialize the subscription
 	var result string
-	err := c.conn.Do(ctx, &result, namespace+subscribeMethodSuffix, args)
+	err := c.conn.Do(ctx, &result, namespace+serviceMethodSeparator+subscribeMethodSuffix, args)
 	if err != nil {
 		return nil, err
 	}
@@ -166,7 +166,7 @@ func (c *clientSub) Err() <-chan error {
 func (c *clientSub) Unsubscribe() error {
 	// TODO: dont use context background here...
 	var result string
-	err := c.conn.Do(context.Background(), &result, c.namespace+unsubscribeMethodSuffix, nil)
+	err := c.conn.Do(context.Background(), &result, c.namespace+serviceMethodSeparator+unsubscribeMethodSuffix, nil)
 	if err != nil {
 		return err
 	}
diff --git a/contrib/extension/subscription/engine.go b/contrib/extension/subscription/engine.go
index 7e3c820..50342b6 100644
--- a/contrib/extension/subscription/engine.go
+++ b/contrib/extension/subscription/engine.go
@@ -41,11 +41,11 @@ func (e *Engine) Middleware() func(codec.Handler) codec.Handler {
 		return codec.HandlerFunc(func(w codec.ResponseWriter, r *codec.Request) {
 			// its a subscription, so install a notification handler
 			switch {
-			case strings.HasSuffix(r.Method, subscribeMethodSuffix):
+			case strings.HasSuffix(r.Method, serviceMethodSeparator+subscribeMethodSuffix):
 				// create the notifier to inject into the context
 				n := &Notifier{
 					h:         w,
-					namespace: strings.TrimSuffix(r.Method, subscribeMethodSuffix),
+					namespace: strings.TrimSuffix(r.Method, serviceMethodSeparator+subscribeMethodSuffix),
 					id:        e.idgen(),
 					err:       make(chan error, 1),
 				}
@@ -59,7 +59,7 @@ func (e *Engine) Middleware() func(codec.Handler) codec.Handler {
 				// then inject the notifier
 				r = r.WithContext(context.WithValue(r.Context(), notifierKey{}, n))
 				h.ServeRPC(w, r)
-			case strings.HasSuffix(r.Method, unsubscribeMethodSuffix):
+			case strings.HasSuffix(r.Method, serviceMethodSeparator+unsubscribeMethodSuffix):
 				// read the subscription id to close
 				var subid SubID
 				err := r.ParamArray(subid)
diff --git a/contrib/extension/subscription/subscription.go b/contrib/extension/subscription/subscription.go
index 4b166de..85a9d3a 100644
--- a/contrib/extension/subscription/subscription.go
+++ b/contrib/extension/subscription/subscription.go
@@ -15,11 +15,16 @@ import (
 	json "github.com/goccy/go-json"
 )
 
+var serviceMethodSeparator = "/"
+
+func SetServiceMethodSeparator(val string) {
+	serviceMethodSeparator = val
+}
+
 const (
-	serviceMethodSeparator   = "/"
-	subscribeMethodSuffix    = serviceMethodSeparator + "subscribe"
-	notificationMethodSuffix = serviceMethodSeparator + "subscription"
-	unsubscribeMethodSuffix  = serviceMethodSeparator + "unsubscribe"
+	subscribeMethodSuffix    = "subscribe"
+	notificationMethodSuffix = "subscription"
+	unsubscribeMethodSuffix  = "unsubscribe"
 
 	maxClientSubscriptionBuffer = 12800
 )
@@ -105,5 +110,8 @@ func (n *Notifier) Err() <-chan error {
 
 func (n *Notifier) send(data json.RawMessage) error {
 	params, _ := json.Marshal(&subscriptionResult{ID: string(n.id), Result: data})
-	return n.h.Notify(n.namespace+notificationMethodSuffix, json.RawMessage(params))
+	return n.h.Notify(
+		n.namespace+
+			serviceMethodSeparator+
+			notificationMethodSuffix, json.RawMessage(params))
 }
-- 
GitLab