Make DB instance visible
[ric-plt/sdlgo.git] / sdl.go
diff --git a/sdl.go b/sdl.go
index 426c2c4..f2cdacb 100644 (file)
--- a/sdl.go
+++ b/sdl.go
@@ -42,21 +42,31 @@ type SdlInstance struct {
        iDatabase
 }
 
+//Database struct is a holder for the internal database instance. Applications
+//can use this exported data type to locally store a reference to database
+//instance returned from NewDabase() function.
+type Database struct {
+       instance iDatabase
+}
+
 //NewDatabase creates a connection to database that will be used
-//as a backend for the key-value storage. The returned value shall
-//be given as a parameter when calling NewKeyValStorage
-func NewDatabase() *sdlgoredis.DB {
-       return sdlgoredis.Create()
+//as a backend for the key-value storage. The returned value
+//can be reused between multiple SDL instances in which case each instance
+//is using the same connection.
+func NewDatabase() *Database {
+       return &Database{
+               instance: sdlgoredis.Create(),
+       }
 }
 
 //NewSdlInstance creates a new sdl instance using the given namespace.
 //The database used as a backend is given as a parameter
-func NewSdlInstance(NameSpace string, db iDatabase) *SdlInstance {
+func NewSdlInstance(NameSpace string, db *Database) *SdlInstance {
        return &SdlInstance{
                nameSpace:      NameSpace,
                nsPrefix:       "{" + NameSpace + "},",
                eventSeparator: "___",
-               iDatabase:      db,
+               iDatabase:      db.instance,
        }
 }
 
@@ -78,6 +88,8 @@ func NewSdlInstance(NameSpace string, db iDatabase) *SdlInstance {
 //callback as quickly as possible. E.g. reading in callback context should be avoided
 //and using of Go signals is recommended. Also it should be noted that in case of several
 //events received from different channels, callbacks are called in series one by one.
+//
+//This function is NOT SAFE FOR CONCURRENT USE by multiple goroutines.
 func (s *SdlInstance) SubscribeChannel(cb func(string, ...string), channels ...string) error {
        s.SubscribeChannelDB(cb, s.nsPrefix, s.eventSeparator, s.setNamespaceToChannels(channels...)...)
        return nil
@@ -590,7 +602,7 @@ type Lock struct {
 }
 
 type iDatabase interface {
-       SubscribeChannelDB(cb sdlgoredis.ChannelNotificationCb, channelPrefix, eventSeparator string, channels ...string)
+       SubscribeChannelDB(cb func(string, ...string), channelPrefix, eventSeparator string, channels ...string)
        UnsubscribeChannelDB(channels ...string)
        MSet(pairs ...interface{}) error
        MSetMPub(channelsAndEvents []string, pairs ...interface{}) error