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"
"github.com/SommerEngineering/Ocean/Tools"
)
2014-04-26 09:18:56 +00:00
func WriteMessage2Any ( channel , command string , message interface { } ) {
cacheListenerDatabaseLock . RLock ( )
defer cacheListenerDatabaseLock . RUnlock ( )
data := message2Data ( channel , command , message )
maxCount := cacheListenerDatabase . Len ( )
entries := make ( [ ] Scheme . Listener , 0 , maxCount )
counter := 0
for entry := cacheListenerDatabase . Front ( ) ; entry != nil ; entry = entry . Next ( ) {
listener := entry . Value . ( Scheme . Listener )
if listener . Channel == channel && listener . Command == command {
entries = entries [ : len ( entries ) + 1 ]
entries [ counter ] = listener
}
}
count := len ( entries )
if count > 0 {
listener := entries [ Tools . RandomInteger ( count ) ]
go sendMessage ( listener , data )
} else {
Log . LogFull ( senderName , LM . CategorySYSTEM , LM . LevelWARN , LM . SeverityCritical , LM . ImpactUnknown , LM . MessageNameCONFIGURATION , ` It was not able to deliver this message to any listener, because no listener was found! ` , ` channel= ` + channel , ` command= ` + command )
}
}