2014-04-26 09:18:56 +00:00
package ICCC
2014-10-19 17:19:11 +00:00
import (
"github.com/SommerEngineering/Ocean/ICCC/Scheme"
"github.com/SommerEngineering/Ocean/Log"
LM "github.com/SommerEngineering/Ocean/Log/Meta"
)
2014-04-26 09:18:56 +00:00
2015-06-17 15:44:52 +00:00
// Function to broadcast a message to all listeners.
2014-04-26 09:18:56 +00:00
func WriteMessage2All ( channel , command string , message interface { } ) {
cacheListenerDatabaseLock . RLock ( )
defer cacheListenerDatabaseLock . RUnlock ( )
2015-06-17 15:44:52 +00:00
// Convert the message to HTTP data:
2014-04-26 09:18:56 +00:00
data := message2Data ( channel , command , message )
counter := 0
2015-06-17 15:44:52 +00:00
// Loop over all listeners which are currently available at the cache:
2014-04-26 09:18:56 +00:00
for entry := cacheListenerDatabase . Front ( ) ; entry != nil ; entry = entry . Next ( ) {
listener := entry . Value . ( Scheme . Listener )
2015-06-17 15:44:52 +00:00
// If the channel and the command matches, deliver the message:
2014-04-26 09:18:56 +00:00
if listener . Channel == channel && listener . Command == command {
go sendMessage ( listener , data )
counter ++
}
}
2015-06-17 15:44:52 +00:00
// Was not able to deliver to any listener?
2014-04-26 09:18:56 +00:00
if counter == 0 {
Log . LogFull ( senderName , LM . CategorySYSTEM , LM . LevelWARN , LM . SeverityCritical , LM . ImpactUnknown , LM . MessageNameCONFIGURATION , ` It was not able to deliver this message, because no listener was found! ` , ` channel= ` + channel , ` command= ` + command )
}
return
}