Server side implementation of event groups. Fixes #NX-1102
[public/netxms.git] / include / nxcc.h
index 2134616..276432f 100644 (file)
 #define NXCC_RCC_INVALID_NODE    1
 #define NXCC_RCC_TIMEOUT         2
 #define NXCC_RCC_COMM_FAILURE    3
+#define NXCC_RCC_NOT_MASTER      4
+#define NXCC_RCC_INVALID_REQUEST 5
+
+/**
+ * Base value for custom notifications
+ */
+#define NXCC_CUSTOM_NOTIFICATION_BASE  1000
 
 /**
  * Cluster node states
@@ -32,7 +39,18 @@ enum ClusterNodeState
 {
    CLUSTER_NODE_DOWN = 0,
    CLUSTER_NODE_CONNECTED = 1,
-   CLUSTER_NODE_UP = 2
+   CLUSTER_NODE_SYNC = 2,
+   CLUSTER_NODE_UP = 3
+};
+
+/**
+ * Cluster message processing result
+ */
+enum ClusterMessageProcessingResult
+{
+   CLUSTER_MSG_IGNORED = 0,
+   CLUSTER_MSG_PROCESSED = 1,
+   CLUSTER_MSG_QUEUED = 2
 };
 
 /**
@@ -45,10 +63,13 @@ public:
    virtual ~ClusterEventHandler();
    
    virtual void onNodeJoin(UINT32 nodeId);
+   virtual void onNodeUp(UINT32 nodeId);
    virtual void onNodeDisconnect(UINT32 nodeId);
    virtual void onShutdown();
+   virtual void onSplitBrain();
    
-   virtual bool onMessage(NXCPMessage *msg, UINT32 sourceNodeId);
+   virtual ClusterMessageProcessingResult onMessage(NXCPMessage *msg, UINT32 sourceNodeId);
+   virtual void onNotification(int code, UINT32 sourceNodeId);
 };
 
 /**
@@ -56,16 +77,23 @@ public:
  */
 bool LIBNXCC_EXPORTABLE ClusterInit(Config *config, const TCHAR *section, ClusterEventHandler *eventHandler);
 bool LIBNXCC_EXPORTABLE ClusterJoin();
+void LIBNXCC_EXPORTABLE ClusterSetRunning();
 void LIBNXCC_EXPORTABLE ClusterShutdown();
 
-void LIBNXCC_EXPORTABLE ClusterSetDebugCallback(void (*cb)(int, const TCHAR *, va_list));
-
+UINT32 LIBNXCC_EXPORTABLE ClusterGetLocalNodeId();
+UINT32 LIBNXCC_EXPORTABLE ClusterGetMasterNodeId();
 bool LIBNXCC_EXPORTABLE ClusterIsMasterNode();
+bool LIBNXCC_EXPORTABLE ClusterIsSyncNeeded();
+bool LIBNXCC_EXPORTABLE ClusterAllNodesConnected();
 
 void LIBNXCC_EXPORTABLE ClusterNotify(NXCPMessage *msg);
+void LIBNXCC_EXPORTABLE ClusterNotify(INT16 code);
+void LIBNXCC_EXPORTABLE ClusterDirectNotify(UINT32 nodeId, INT16 code);
+void LIBNXCC_EXPORTABLE ClusterDirectNotify(UINT32 nodeId, NXCPMessage *msg);
 int LIBNXCC_EXPORTABLE ClusterSendCommand(NXCPMessage *msg);
 UINT32 LIBNXCC_EXPORTABLE ClusterSendDirectCommand(UINT32 nodeId, NXCPMessage *msg);
 NXCPMessage LIBNXCC_EXPORTABLE *ClusterSendDirectCommandEx(UINT32 nodeId, NXCPMessage *msg);
 void LIBNXCC_EXPORTABLE ClusterSendResponse(UINT32 nodeId, UINT32 requestId, UINT32 rcc);
+void LIBNXCC_EXPORTABLE ClusterSendResponseEx(UINT32 nodeId, UINT32 requestId, NXCPMessage *msg);
 
 #endif