//
// File: hzDelta.h
//
// Legal Notice: This file is part of the HadronZoo C++ Class Library.
//
// Copyright 2025 HadronZoo Project (http://www.hadronzoo.com)
//
// The HadronZoo C++ Class Library is free software: You can redistribute it, and/or modify it under the terms of the GNU Lesser General Public License, as published by the Free
// Software Foundation, either version 3 of the License, or any later version.
//
// The HadronZoo C++ Class Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License along with the HadronZoo C++ Class Library. If not, see http://www.gnu.org/licenses.
//
#ifndef hzDelta_h
#define hzDelta_h
#include "hzTcpClient.h"
enum hzDeltaReq
{
// Category: System
//
// Commands and notifications to and from Delta Server
// Client Commands to server
DELTA_CLI_CONNECT = 1, // Request by application to connect to the local Delta Server
DELTA_CLI_QUIT = 2, // Request by application to disconnect from the local Delta Server
DELTA_CLI_QUEFILE = 3, // Request by application for local Delta Server to que file for transmission
DELTA_CLI_DELFILE = 4, // Notification by application of a file deletion
DELTA_CLI_DELTA = 5, // Notification by application of a data repository update
// Server commands to server
DELTA_SVR_CONNECT = 10, // Other server seeks connection to here
DELTA_SVR_QUIT = 11, // Other server is to disconnect from this server
DELTA_SVR_GETCONFIG = 12, // Other server want's this server's config
DELTA_SVR_GETFSTATE = 13, // Other server want's this server's file states
DELTA_SVR_GETFILE = 14, // Other server tells this server to que up a file for transmission
DELTA_SVR_GETDELTA = 15, // Other server seeks to obtain a missing delta or set of deltas
DELTA_SVR_HEAD = 16, // First part of file transmission
DELTA_SVR_PART = 17, // Subsequent part of file transmission
DELTA_SVR_DELFILE = 18, // Notification by server of a file deletion by an application
DELTA_SVR_DELTA = 19, // Notification by server of a data repository update in an application
// Server notifications to client
DELTA_NOT_FILE = 20, // Server notifies application of a file placed in its space
DELTA_NOT_DELFILE = 21, // Server notifies application of a file deleted from its space
DELTA_NOT_DELTA = 22, // Server notifies application of a data repository update
} ;
enum hzDeltaRes
{
// Category: System
//
// Responses and notifications from Delta Server
DELTA_ERR_CONN = 1, // Could not connect to Delta
DELTA_ERR_DUPCONN = 2, // Already connected to Delta
DELTA_ERR_SEND = 3, // Data could not be written to a socket
DELTA_ERR_RECV = 4, // Data could not be read from a socket
DELTA_ERR_PERM = 5, // Process does not have write permission
DELTA_ERR_DUP = 6, // Instruction already recived/Channel already open
DELTA_ERR_NOMEM = 7, // No memory on the Delta Server to execute command
DELTA_NACK = 8, // Request failed, no reason available
DELTA_ACK = 9, // Request succesful
} ;
class hzDeltaClient
{
// Category: System
//
// The Delta Server client class. Note this is only used to notify the local Delta Server of repository updates and uploaded file occuring within
// an application. Notifications from the Delta Server advising of repository updates and uploaded file occuring within a sister application on
// another server within the Delta cluster, are handled by the ProcDelta() event handler defined in hzDelta.cpp
hzTcpClient m_Connection ; // Client connection to Delta Server
hzString m_AppDescFile ; // Filepath to application description (XML) file
uint32_t m_nSessID ; // Session ID
uint32_t m_nPort ; // The port this app will listen on for Delta notifications
char m_cvData[HZ_MAXPACKET+4] ; // Buffer for data transportation
hzDeltaClient (void)
{
m_nSessID = m_nPort = 0 ;
}
public:
static hzDeltaClient* GetInstance (void) ;
~hzDeltaClient (void) {}
hzEcode InitOnce (hzString& filepath) ;
// Client requests (by applicaton)
hzEcode Connect (void) ;
hzEcode Quit (void) ;
hzEcode SendFile (hzString& filepath) ;
hzEcode DelFile (hzString& filepath) ;
hzEcode DeltaWrite (hzChain& Zd) ;
// Check connection
bool IsOpen (void) { return m_nSessID ? true : false ; }
uint32_t SessID (void) { return m_nSessID ; }
// Close client connection to Delta
hzEcode Close (void) ;
} ;
/*
** Prototypes
*/
//hzEcode DeltaInit (const char* dir, const char* appname, const char* arg, const char* version, bool bMustHave) ;
#endif // hzDelta_h