25 Commits
Author SHA1 Message Date
Thorsten Sommer 27e3eef7fc Merge pull request #50 from SommerEngineering/master
2.0.7
2016-01-08 08:55:10 +00:00
Thorsten Sommer b2cf41a088 Version 2.0.7 2016-01-05 20:50:43 +01:00
Thorsten Sommer a72d45d27c Fixed the ICCC::Kind enum 2015-07-20 19:54:37 +02:00
Thorsten Sommer 0c80f4bdcc Fixed the ICCC::Kind enum 2015-07-20 19:53:46 +02:00
Thorsten Sommer 47fc86f490 README 2015-07-16 20:35:43 +02:00
Thorsten Sommer e316ccbf95 README 2015-07-16 20:34:57 +02:00
Thorsten Sommer 4dfda5a807 Fixed ping command and one log event 2015-07-16 18:51:59 +02:00
Thorsten Sommer 744a817150 Adjusted the ICCC driver specification 2015-07-16 13:11:40 +02:00
Thorsten Sommer 4ebaaebaa7 Fixed ICCC driver specification 2015-07-16 10:05:29 +02:00
Thorsten Sommer 210373280f Changed the ICCC driver specification 2015-07-16 08:45:22 +02:00
Thorsten Sommer ca8a960896 Extend the ICCC driver specification 2015-07-15 21:12:48 +02:00
Thorsten Sommer d071609988 Bugfix: The start-up message's values are wrong 2015-07-15 19:25:45 +02:00
Thorsten Sommer c1748edd8d Bugfix for the LogImpact class 2015-07-15 14:31:45 +02:00
Thorsten Sommer 041cda8a35 Extended the ICCC driver specification 2015-07-14 18:06:51 +02:00
Thorsten Sommer 6c6e52536a Preparation for the next release 2015-07-14 17:02:56 +02:00
Thorsten Sommer 630147ecdd Bugfix: Remove empty parameters 2015-07-14 17:02:42 +02:00
Thorsten Sommer 36bf26e12a Bugfix: The ICCC logging events are without project name 2015-07-14 16:34:25 +02:00
Thorsten Sommer 0bca5ebb7b Bugfix: The hash was wrong
* The checksum must be uppercase
* The data string was wrong
2015-07-14 16:33:50 +02:00
Thorsten Sommer 858cfc81e4 Fixed external ICCC component start-up 2015-07-14 16:32:48 +02:00
Thorsten Sommer 74b287017b Fixed the ICCCConnection class 2015-07-13 17:45:55 +02:00
Thorsten Sommer b74c9e7fa3 Fixed an issue for the ICCCConnection class 2015-07-13 16:33:39 +02:00
Thorsten Sommer a792a8e86f Fixed the ICCC driver specification 2015-07-13 11:38:09 +02:00
Thorsten Sommer 40fd2d5dfb Fixed the ICCC driver specification 2015-07-13 11:00:54 +02:00
Thorsten Sommer bfedc63eb6 Implemented the fixed ICCC driver specification 2015-07-13 10:57:56 +02:00
Thorsten Sommer 6ab4732b85 Fixed the ICCC driver specification 2015-07-13 10:57:30 +02:00
17 changed files with 47 additions and 26 deletions

No files matched your search

+3 -3
View File
@@ -14,7 +14,7 @@ func connectDatabase(config Meta.Configuration) {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err) fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err)
os.Exit(0) os.Exit(1)
} }
}() }()
@@ -22,7 +22,7 @@ func connectDatabase(config Meta.Configuration) {
if newSession, errDial := mgo.Dial(config.ConfigDBHostname); errDial != nil { if newSession, errDial := mgo.Dial(config.ConfigDBHostname); errDial != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+config.ConfigDBHostname, errDial.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+config.ConfigDBHostname, errDial.Error())
fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error()) fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error())
os.Exit(0) os.Exit(1)
} else { } else {
session = newSession session = newSession
} }
@@ -34,7 +34,7 @@ func connectDatabase(config Meta.Configuration) {
if errLogin := db.Login(config.ConfigDBConfigurationCollectionUsername, config.ConfigDBConfigurationCollectionPassword); errLogin != nil { if errLogin := db.Login(config.ConfigDBConfigurationCollectionUsername, config.ConfigDBConfigurationCollectionPassword); errLogin != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+config.ConfigDBConfigurationCollectionUsername, errLogin.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+config.ConfigDBConfigurationCollectionUsername, errLogin.Error())
fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error()) fmt.Printf("[Error] Was not able to connect to the configuration database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error())
os.Exit(0) os.Exit(1)
} }
// In case of write operations, wait for the majority of servers to be done: // In case of write operations, wait for the majority of servers to be done:
+5 -5
View File
@@ -13,7 +13,7 @@ func connectDatabase(host, username, password, database string) {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err) fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err)
os.Exit(0) os.Exit(2)
} }
}() }()
@@ -21,7 +21,7 @@ func connectDatabase(host, username, password, database string) {
if newSession, errDial := mgo.Dial(host); errDial != nil { if newSession, errDial := mgo.Dial(host); errDial != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+host, errDial.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+host, errDial.Error())
fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error()) fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error())
os.Exit(0) os.Exit(2)
} else { } else {
mainSession = newSession mainSession = newSession
} }
@@ -31,14 +31,14 @@ func connectDatabase(host, username, password, database string) {
if db == nil { if db == nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `Was not able to get the customer database.`) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `Was not able to get the customer database.`)
fmt.Printf("[Error] Was not able to connect to the customer database. Please read https://github.com/SommerEngineering/Ocean.\n") fmt.Printf("[Error] Was not able to connect to the customer database. Please read https://github.com/SommerEngineering/Ocean.\n")
os.Exit(0) os.Exit(2)
} }
// Login: // Login:
if errLogin := db.Login(username, password); errLogin != nil { if errLogin := db.Login(username, password); errLogin != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+databaseUsername, errLogin.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+databaseUsername, errLogin.Error())
fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error()) fmt.Printf("[Error] Was not able to connect to the customer database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error())
os.Exit(0) os.Exit(2)
} }
// In case of write operations, wait for the majority of servers to be done: // In case of write operations, wait for the majority of servers to be done:
@@ -53,7 +53,7 @@ func connectDatabase(host, username, password, database string) {
if gridFS == nil { if gridFS == nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `Was not able to get the GridFS from the database.`) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityCritical, LM.ImpactCritical, LM.MessageNameDATABASE, `Was not able to get the GridFS from the database.`)
fmt.Printf("[Error] Was not able to connect to the customer database. Please read https://github.com/SommerEngineering/Ocean.\n") fmt.Printf("[Error] Was not able to connect to the customer database. Please read https://github.com/SommerEngineering/Ocean.\n")
os.Exit(0) os.Exit(2)
} }
// Ensure the indexes for the GridFS: // Ensure the indexes for the GridFS:
+2 -1
View File
@@ -2,9 +2,10 @@ package Handlers
import ( import (
"fmt" "fmt"
"net/http"
"github.com/SommerEngineering/Ocean/Log" "github.com/SommerEngineering/Ocean/Log"
LM "github.com/SommerEngineering/Ocean/Log/Meta" LM "github.com/SommerEngineering/Ocean/Log/Meta"
"net/http"
) )
// Function to add a new public handler. // Function to add a new public handler.
+1 -1
View File
@@ -56,7 +56,7 @@ func ICCCHandler(response http.ResponseWriter, request *http.Request) {
if listener == nil { if listener == nil {
// Case: No such listener // Case: No such listener
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameCONFIGURATION, `Was not able to find the correct listener for these ICCC message.`, `channel=`+channel, `command`+command, `hostname=`+Tools.ThisHostname()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityCritical, LM.ImpactUnknown, LM.MessageNameCONFIGURATION, `Was not able to find the correct listener for these ICCC message.`, `channel=`+channel, `command=`+command, `hostname=`+Tools.ThisHostname())
http.NotFound(response, request) http.NotFound(response, request)
} else { } else {
// Case: Everything is fine => deliver the message and read the answer: // Case: Everything is fine => deliver the message and read the answer:
+1
View File
@@ -39,6 +39,7 @@ func ICCCListenerUpdateReceiver(data map[string][]string) (result map[string][]s
updatedObject.Command = messageData.Command updatedObject.Command = messageData.Command
updatedObject.IPAddressPort = messageData.IPAddressPort updatedObject.IPAddressPort = messageData.IPAddressPort
updatedObject.IsActive = messageData.IsActiveNew updatedObject.IsActive = messageData.IsActiveNew
updatedObject.Kind = messageData.Kind
// Update the entry: // Update the entry:
if errUpdate := collectionListener.Update(selectionUpdate, updatedObject); errUpdate != nil { if errUpdate := collectionListener.Update(selectionUpdate, updatedObject); errUpdate != nil {
+3 -2
View File
@@ -6,6 +6,7 @@ import (
"github.com/SommerEngineering/Ocean/Tools" "github.com/SommerEngineering/Ocean/Tools"
"net/url" "net/url"
"sort" "sort"
"strings"
) )
// Sign a message to secure it. // Sign a message to secure it.
@@ -32,7 +33,7 @@ func signMessage(data map[string][]string) (result url.Values) {
// Now, loop over all the data: // Now, loop over all the data:
for _, key := range keys { for _, key := range keys {
// Get the value: // Get the value:
value := data[key] value := data[key][0]
// Hash each key and value: // Hash each key and value:
fmt.Fprintf(hash, "key=%s :: value=%s\n", key, value) fmt.Fprintf(hash, "key=%s :: value=%s\n", key, value)
@@ -42,6 +43,6 @@ func signMessage(data map[string][]string) (result url.Values) {
result = url.Values(data) result = url.Values(data)
// Append the sign: // Append the sign:
result.Add(`checksum`, fmt.Sprintf("%x", hash.Sum(nil))) result.Add(`checksum`, strings.ToUpper(fmt.Sprintf("%x", hash.Sum(nil))))
return return
} }
@@ -6,4 +6,5 @@ type ICCCListenerUpdate struct {
Command string Command string
IPAddressPort string IPAddressPort string
IsActiveNew bool IsActiveNew bool
Kind byte
} }
+3 -3
View File
@@ -18,7 +18,7 @@ func initDatabase() {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err) fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", err)
os.Exit(0) os.Exit(2)
} }
}() }()
@@ -57,7 +57,7 @@ func initDatabase() {
if newSession, errDial := mgo.Dial(databaseHost); errDial != nil { if newSession, errDial := mgo.Dial(databaseHost); errDial != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+databaseHost, errDial.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to connect to the MongoDB host `+databaseHost, errDial.Error())
fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error()) fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errDial.Error())
os.Exit(0) os.Exit(2)
} else { } else {
logDBSession = newSession logDBSession = newSession
} }
@@ -69,7 +69,7 @@ func initDatabase() {
if errLogin := logDB.Login(databaseUsername, databasePassword); errLogin != nil { if errLogin := logDB.Login(databaseUsername, databasePassword); errLogin != nil {
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+databaseUsername, errLogin.Error()) Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelSECURITY, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNameDATABASE, `It was not possible to login the user `+databaseUsername, errLogin.Error())
fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error()) fmt.Printf("[Error] Was not able to connect to the logging database: %s. Please read https://github.com/SommerEngineering/Ocean.\n", errLogin.Error())
os.Exit(0) os.Exit(2)
} }
// Get the collection: // Get the collection:
+7
View File
@@ -0,0 +1,7 @@
package Log
// This function provides the project name for e.g. logging events
// coming trough the ICCC.
func GetProjectName() string {
return projectName
}
+7 -1
View File
@@ -121,10 +121,16 @@ func clearEntry(entry Meta.Entry) (result Meta.Entry) {
// Remove white spaces from the parameters. // Remove white spaces from the parameters.
func clearParameters(oldParameters []string) (result []string) { func clearParameters(oldParameters []string) (result []string) {
for n := 0; n < len(oldParameters); n++ { for n := 0; n < len(oldParameters); n++ {
// Remove white spaces:
oldParameters[n] = removeWhitespaces(oldParameters[n]) oldParameters[n] = removeWhitespaces(oldParameters[n])
// Is content left after removing?
if oldParameters[n] != `` {
// Yes, some content is still there. Thus, commit this entry:
result = append(result, oldParameters[n])
}
} }
result = oldParameters
return return
} }
+1
View File
@@ -30,6 +30,7 @@ func ICCCNewLogEventReceiver(data map[string][]string) (result map[string][]stri
// Provide a log entry: // Provide a log entry:
logEntry := LM.Entry{} logEntry := LM.Entry{}
logEntry.Project = Log.GetProjectName()
logEntry.Sender = LM.Sender(messageData.Sender) logEntry.Sender = LM.Sender(messageData.Sender)
logEntry.Category = LM.ParseCategory(messageData.Category) logEntry.Category = LM.ParseCategory(messageData.Category)
logEntry.Level = LM.ParseLevel(messageData.Level) logEntry.Level = LM.ParseLevel(messageData.Level)
BIN
View File
Binary file not shown.
+9 -6
View File
@@ -49,11 +49,11 @@ The second configuration file is **configuration.json**. It contains the configu
```JSON ```JSON
{ {
"ConfigDBHostname" : "127.0.0.1:27017", "ConfigDBHostname" : "127.0.0.1:27017",
"ConfigDBDatabase" : "MyOcean", "ConfigDBDatabase" : "MyOcean",
"ConfigDBConfigurationCollection" : "Configuration", "ConfigDBConfigurationCollection" : "Configuration",
"ConfigDBConfigurationCollectionUsername" : "MyOceanConfig", "ConfigDBConfigurationCollectionUsername" : "MyOceanConfig",
"ConfigDBConfigurationCollectionPassword" : "PWD" "ConfigDBConfigurationCollectionPassword" : "PWD"
} }
``` ```
The `ConfigDBConfigurationCollection` collection gets automatically created. After both files are present and the MongoDB database or database cluster is running, Ocean is able to start. The database can and should be empty. Ocean does the configuration automatically. Due to this minimal local configuration and the distributed configuration database, the deployment of additional Ocean servers can be achieved by using e.g. data center scripts, etc. The `ConfigDBConfigurationCollection` collection gets automatically created. After both files are present and the MongoDB database or database cluster is running, Ocean is able to start. The database can and should be empty. Ocean does the configuration automatically. Due to this minimal local configuration and the distributed configuration database, the deployment of additional Ocean servers can be achieved by using e.g. data center scripts, etc.
@@ -91,7 +91,10 @@ exit
* Finnaly, start Ocean again. The system should now run fine. Please have a look at the ICCC startup logging messages. * Finnaly, start Ocean again. The system should now run fine. Please have a look at the ICCC startup logging messages.
### Use Ocean as distributed messaging broker ### Use Ocean as distributed messaging broker
For this case, you can now start your other ICCC components. This are e.g. some Java, Python or C# programs which are using the Ocean ICCC drivers. These drivers currently under development and they will be available soon. For this case, you can now start your other ICCC components. This are e.g. some Java, Python or C# programs which are using the Ocean ICCC drivers. These drivers currently under development and they will be available soon. **The next priority:** OceanPy, the ICCC driver for Python.
**Available ICCC drivers:**
- [OceanNET - ICCC with .NET and C#](https://github.com/SommerEngineering/OceanNET)
### Use Ocean as framework e.g. for websites ### Use Ocean as framework e.g. for websites
For this case, an example project with documentation is available here: https://github.com/SommerEngineering/Example003 For this case, an example project with documentation is available here: https://github.com/SommerEngineering/Example003
@@ -29,7 +29,7 @@ func icccComponentStartUpMessageReceiver(data map[string][]string) (result map[s
messageData := obj.(SystemMessages.ICCCComponentStartUpMessage) messageData := obj.(SystemMessages.ICCCComponentStartUpMessage)
// Provide a log entry: // Provide a log entry:
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The external component is now up and ready.`, fmt.Sprintf("ipAddressPort=%s", messageData.IPAddressPort), fmt.Sprintf("name=", messageData.Name), fmt.Sprintf("version=", messageData.Version)) Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The external component is now up and ready.`, fmt.Sprintf("ipAddressPort='%s'", messageData.IPAddressPort), fmt.Sprintf("name='%s'", messageData.Name), fmt.Sprintf("version='%s'", messageData.Version))
// An answer is necessary: // An answer is necessary:
return ICCC.Message2Data("", "", SystemMessages.AnswerACK) return ICCC.Message2Data("", "", SystemMessages.AnswerACK)
+1 -1
View File
@@ -29,7 +29,7 @@ func icccOceanStartUpMessageReceiver(data map[string][]string) (result map[strin
messageData := obj.(SystemMessages.ICCCOceanStartUpMessage) messageData := obj.(SystemMessages.ICCCOceanStartUpMessage)
// Provide a log entry: // Provide a log entry:
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The Ocean server is now up and ready.`, fmt.Sprintf("public server=%s", messageData.PublicIPAddressPort), fmt.Sprintf("admin server=%s", messageData.AdminIPAddressPort), fmt.Sprintf("Ocean's version=%s", messageData.OceanVersion)) Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The Ocean server is now up and ready.`, fmt.Sprintf("public server='%s'", messageData.PublicIPAddressPort), fmt.Sprintf("admin server='%s'", messageData.AdminIPAddressPort), fmt.Sprintf("Ocean's version='%s'", messageData.OceanVersion))
// An answer is necessary: // An answer is necessary:
return ICCC.Message2Data("", "", SystemMessages.AnswerACK) return ICCC.Message2Data("", "", SystemMessages.AnswerACK)
+1 -1
View File
@@ -105,7 +105,7 @@ func initSystem() {
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::DeleteListener`, ICCC.ICCCDeleteListenerReceiver) ICCC.Registrar(ICCC.ChannelICCC, `ICCC::DeleteListener`, ICCC.ICCCDeleteListenerReceiver)
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::DeleteHost`, ICCC.ICCCDeleteHostReceiver) ICCC.Registrar(ICCC.ChannelICCC, `ICCC::DeleteHost`, ICCC.ICCCDeleteHostReceiver)
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::ListenerUpdate`, ICCC.ICCCListenerUpdateReceiver) ICCC.Registrar(ICCC.ChannelICCC, `ICCC::ListenerUpdate`, ICCC.ICCCListenerUpdateReceiver)
ICCC.Registrar(ICCC.ChannelICCC, `Ping::Ping`, ICCC.ICCCPingReceiver) ICCC.Registrar(ICCC.ChannelPING, `Ping::Ping`, ICCC.ICCCPingReceiver)
ICCC.Registrar(ICCC.ChannelSYSTEM, `System::Version`, ICCC.ICCCGetVersionReceiver) ICCC.Registrar(ICCC.ChannelSYSTEM, `System::Version`, ICCC.ICCCGetVersionReceiver)
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetHosts`, ICCC.ICCCGetHostsReceiver) ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetHosts`, ICCC.ICCCGetHostsReceiver)
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetListeners`, ICCC.ICCCGetListenersReceiver) ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetListeners`, ICCC.ICCCGetListenersReceiver)
+1 -1
View File
@@ -1,5 +1,5 @@
package Version package Version
var ( var (
oceansVersion string = `2.0.2` // Ocean's current version oceansVersion string = `2.0.7` // Ocean's current version
) )