mirror of
https://github.com/SWG-Source/src.git
synced 2026-10-05 22:12:52 -04:00
Added ChatServer and soePlatform
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
#ifndef UDPLIBRARY_UDPDRIVER_H
|
||||
#define UDPLIBRARY_UDPDRIVER_H
|
||||
|
||||
#include "UdpTypes.h"
|
||||
|
||||
namespace UdpLibrary
|
||||
{
|
||||
|
||||
// Copyright 2004 Sony Online Entertainment, all rights reserved.
|
||||
// Author: Jeff Petersen
|
||||
|
||||
class UdpDriver
|
||||
{
|
||||
public:
|
||||
virtual ~UdpDriver() {}
|
||||
|
||||
// socket related functions
|
||||
virtual bool SocketOpen(int port, int incomingBufferSize, int outgoingBufferSize, const char *bindIpAddress) = 0; // returns true if successful, false if it could not allocate/bind the socket to specified port
|
||||
virtual void SocketClose() = 0;
|
||||
virtual int SocketReceive(char *buffer, int bufferSize, UdpPlatformAddress *ipAddress, int *port) = 0; // returns bytes read, -1 if no data, 0 for ICMP errors (from ip/port is filled in with who got the error)
|
||||
virtual bool SocketSend(const char *data, int dataLen, const UdpPlatformAddress *ipAddress, int port) = 0;
|
||||
virtual void SocketSendPortAlive(const char *data, int dataLen, const UdpPlatformAddress *ipAddress, int port) = 0;
|
||||
virtual bool SocketGetLocalIp(UdpPlatformAddress *ipAddress) = 0;
|
||||
virtual int SocketGetLocalPort() = 0;
|
||||
|
||||
// non-socket related functions
|
||||
virtual bool GetHostByName(UdpPlatformAddress *ipAddress, const char *hostName) = 0;
|
||||
virtual bool GetSelfAddress(UdpPlatformAddress *ipAddress, bool preferNoRoute) = 0;
|
||||
virtual void Sleep(int milliseconds) = 0;
|
||||
virtual UdpClockStamp Clock() = 0;
|
||||
};
|
||||
|
||||
class UdpPlatformData;
|
||||
class UdpPlatformDriver : public UdpDriver
|
||||
{
|
||||
public:
|
||||
UdpPlatformDriver();
|
||||
virtual ~UdpPlatformDriver();
|
||||
|
||||
// socket related functions
|
||||
virtual bool SocketOpen(int port, int incomingBufferSize, int outgoingBufferSize, const char *bindIpAddress);
|
||||
virtual void SocketClose();
|
||||
virtual int SocketReceive(char *buffer, int bufferSize, UdpPlatformAddress *ipAddress, int *port);
|
||||
virtual bool SocketSend(const char *data, int dataLen, const UdpPlatformAddress *ipAddress, int port);
|
||||
virtual void SocketSendPortAlive(const char *data, int dataLen, const UdpPlatformAddress *ipAddress, int port);
|
||||
virtual bool SocketGetLocalIp(UdpPlatformAddress *ipAddress);
|
||||
virtual int SocketGetLocalPort();
|
||||
|
||||
// non-socket related functions that only the platform driver has
|
||||
virtual bool GetHostByName(UdpPlatformAddress *ipAddress, const char *hostName);
|
||||
virtual bool GetSelfAddress(UdpPlatformAddress *ipAddress, bool preferNoRoute);
|
||||
virtual void Sleep(int milliseconds);
|
||||
virtual UdpClockStamp Clock();
|
||||
|
||||
private:
|
||||
UdpPlatformData *mData;
|
||||
};
|
||||
|
||||
class UdpPlatformGuardData;
|
||||
class UdpPlatformGuardObject
|
||||
{
|
||||
public:
|
||||
UdpPlatformGuardObject();
|
||||
~UdpPlatformGuardObject();
|
||||
void Enter();
|
||||
void Leave();
|
||||
|
||||
private:
|
||||
UdpPlatformGuardData *mData;
|
||||
};
|
||||
|
||||
class UdpGuardedRefCount : public UdpRefCount
|
||||
{
|
||||
// portable: implemented in UdpLibrary.cpp
|
||||
public:
|
||||
virtual void AddRef() const;
|
||||
virtual void Release() const;
|
||||
|
||||
protected:
|
||||
mutable UdpPlatformGuardObject mGuard;
|
||||
};
|
||||
|
||||
class UdpPlatformThreadData;
|
||||
class UdpPlatformThreadObject : public UdpGuardedRefCount
|
||||
{
|
||||
public:
|
||||
UdpPlatformThreadObject();
|
||||
|
||||
virtual void Start(); // starts thread running (can't do this in constructor because we need to give derived classes time to finish constructing)
|
||||
virtual bool IsRunning();
|
||||
virtual void Run() = 0;
|
||||
|
||||
protected:
|
||||
virtual ~UdpPlatformThreadObject();
|
||||
|
||||
public:
|
||||
UdpPlatformThreadData *mThreadData;
|
||||
};
|
||||
|
||||
class UdpPlatformAddress
|
||||
{
|
||||
public:
|
||||
UdpPlatformAddress();
|
||||
UdpPlatformAddress(const UdpPlatformAddress &source);
|
||||
bool operator==(const UdpPlatformAddress &e) const;
|
||||
UdpPlatformAddress &operator=(const UdpPlatformAddress &e);
|
||||
char *GetAddress(char *buffer, int bufferLen) const;
|
||||
void SetAddress(const char *address);
|
||||
int GetHash();
|
||||
|
||||
protected:
|
||||
friend class UdpPlatformDriver;
|
||||
// note: platforms are required to be able to store their representation of the address in these 4 bytes
|
||||
// if we come across a platform that needs more space than this (or when we start doing IPv6), then we will
|
||||
// increase this space a bit. This is sufficient for every platform so far and it avoids us having to
|
||||
// do an allocation, particularly since these things are passed around by-value a lot.
|
||||
unsigned char mData[4];
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user