mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-09-23 08:13:30 -04:00
105 lines
3.0 KiB
C++
Executable File
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
|
|
|