Files
src-1.2/engine/server/application/LogServer/src/shared/LoggingServerApi.h
T

105 lines
3.0 KiB
C++
Executable File

#ifndef LOGGINGSERVERAPI_H
#define LOGGINGSERVERAPI_H
#include "UdpLibrary.hpp"
struct LoggingServerApiStatistics
{
//These are all statistics from the UdpConnection object.
udp_int64 totalBytesSent;
udp_int64 totalBytesReceived;
udp_int64 totalPacketsSent; // total packets we have sent
udp_int64 totalPacketsReceived; // total packets we have received
udp_int64 applicationPacketsSent;
udp_int64 applicationPacketsReceived;
double iterationsPerSecond;
int totalTime;
};
class LoggingServerHandler;
class LoggingServerApi : public UdpConnectionHandler
{
public:
enum { cDefaultPort = 9877 };
enum Status { cStatusDisconnected, cStatusConnected, cStatusNegotiating, cStatusAuthenticating };
LoggingServerApi(LoggingServerHandler *handler, int queueSize = 4096);
virtual ~LoggingServerApi();
void Connect(const char *address, int port, const char *loginName, const char *password, const char *defaultDirectory);
void Disconnect();
void Flush(int timeout); // blocking call to flush the log (timeout is how long to try, in ms)
Status GetStatus() const;
void GiveTime();
void Log16(const char *filename, int typeCode, const unsigned short *ucs2String); // no formatting support, application will have to do that on it's own
void Log(const char *filename, int typeCode, const char *message, ...); // printf style formatting
void StartTransaction();
void StopTransaction();
void RequestMonitor(const char *filename, bool turnOn);
void RequestFileList();
void GetStatistics(LoggingServerApiStatistics *stats);
protected:
enum { cSafetyQueueTime = 3 * 60 * 1000 }; // 3 minutes
LoggingServerHandler *mHandler;
UdpManager *mUdpManager;
bool mAuthenticated;
bool mLoginSent;
UdpConnection *mConnection;
char mLoginName[256];
char mPassword[256];
char mDefaultDirectory[256];
GroupLogicalPacket *mTransaction;
int mSessionId;
int mSessionSequence;
// queue system
struct QueueEntry
{
LogicalPacket *packet;
UdpMisc::ClockStamp sentTime;
};
QueueEntry *mQueue;
int mQueueSize;
int mQueueCount;
int mQueuePosition;
void FlushQueue();
void PacketSend(LogicalPacket *lp);
void LogPacket(char *data, int len);
LogicalPacket *CreatePacket(char *data, int dataLen);
public:
// these are public so the server-application can see them
enum C2SPacket { cC2SPacketNotUsed, cC2SPacketLogin, cC2SPacketLog, cC2SPacketMonitor, cC2SPacketFileList, cC2SPacketLog16 };
enum S2CPacket { cS2CPacketNotUsed, cS2CPacketLoginConfirm, cS2CPacketMonitor, cS2CPacketFileList };
virtual void OnRoutePacket(UdpConnection *con, const uchar *data, int dataLen);
virtual void OnTerminated(UdpConnection *con);
};
class LoggingServerHandler
{
public:
virtual void LshOnLoginConfirm(bool authenticated);
virtual void LshOnMonitor(int sessionId, int sequenceNumber, const char * const name, const char * const filename, int typeCode, const char * const message);
virtual void LshOnFileList(const char * const fileList);
virtual void LshOnTerminated(UdpConnection::DisconnectReason disconnect);
};
#endif