由于小弟對VC不熟悉 哪位大哥給翻譯下 小弟感激不盡
#ifndef _pudx_h_
#define _pudx_h_
#pragma once
/////////////////////////基礎定義///////////////////////////////
//流定義
#ifndef SOCKADDR
typedef struct sockaddr SOCKADDR;
typedef UINT_PTR SOCKET;
#endif
class IDebug
{
public:
virtual void Test1(){};
virtual void Test2(){};
virtual void Test3(){};
virtual void Test4(){};
};
class IRef
{
public:
virtual long AddRef() = 0;
virtual long Release() = 0;
virtual void Reset() = 0;
virtual void Delete() = 0;
};
class ICreator
{
public:
virtual IRef *CreateInstance() = 0;
};
class IRefPool
{
public:
virtual IRef *GetNewRef() = 0;
virtual void ReleaseRef(IRef* pRef) = 0;
virtual void SetCreator(ICreator *pCreator) = 0;
};
class IUdxSink
{
public:
virtual BOOL TryAcceptConnect(SOCKADDR * pAddr,BYTE * pData,int iLen){return true;};
virtual void OnRemoteEnject(SOCKADDR * pAddr,BYTE * pData,int iLen){};
virtual void OnConnected(SOCKADDR * pAddr){};
virtual void OnUdxReadEvent(BYTE* pData,long len){};
virtual void OnUdxWriteEvent(BYTE* pData,long len){};
virtual void OnUdxReadMsgEvent(BYTE* pData,long len){};
virtual void OnUdxWriteMsgEvent(BYTE* pData,long len){};
virtual void OnRemoteBroken(){};
};
class IUdxInfo
{
public:
DWORD m_dwRead;
DWORD m_dwWrite;
DWORD m_start,m_end;
DWORD m_ReadCount;
DWORD m_WriteCount;
DWORD m_SendTotalCount;
DWORD m_errocount;
DWORD s1,e1,s2,e2,m_sendindex;
DWORD m_ackcount;
DWORD m_lastsend;
DWORD m_lastread;
DWORD m_lasttime;
DWORD m_currentspeedread;
DWORD m_currentspeedsend;
DWORD m_lastUpdateTime;
float m_wnd;
float m_rto;
float m_ttl;
float m_minttl;
float m_d;
float m_pi;
int m_uncheckcount;
int m_checked;
int m_currentsendcount;
int m_expect;
int m_PipSize;
int m_buffsize;
int m_sendbuffsize;
virtual void GetSpeedStr(char * buff,BOOL bSend = TRUE,BOOL bCurrent = FALSE)=0;
virtual DWORD GetCurrentSpeed(BOOL bSend = TRUE)=0;
virtual DWORD GetSpeed(BOOL bSend = TRUE)=0;
virtual char* GetInfo()=0;
virtual void Reset()=0;
virtual void UpDateCurrentSpeed()=0;
protected:
char buff[1024];
};
struct IUdxCfg
{
int wndmaxsize; //必須為8的整數倍,8~1024,傳輸滑動視窗大小
float dbLostRat;//默認 0.3
BOOL bPI; //for diff,動態計整閥值因子
float dbpi;
BOOL bCareLost; //帶寬搶占的一個因子
BOOL bLimitSpeedWrite; //限制上傳速度
DWORD limitspeedWrite; //具體的限速
BOOL bLimitSpeedRead; //限制下載速度
DWORD limitspeedRead; //具體的限速
BOOL bSpeedThresholdWrite;//發送臨界速度
DWORD thresholdspeedWrite;//我們比較關心的閥值 ,比如500kbps,當超過這個值 的時候,我們不必去爭奪帶寬
BOOL bSpeedThresholdRead;//接收臨界速度
DWORD thresholdspeedRead;//我們比較關心的閥值 ,比如500kbps,當超過這個值 的時候,我們不必去爭奪帶寬
};
class IRowUdpSink
{
public :
virtual void _OnRead(SOCKADDR * pAddr,BYTE *pData, long len){};
virtual int SendBuffs(){return 0;};
};
class ISocketTimer
{
public:
virtual void OnTimer() {};
};
class IRowUdp
{
public:
virtual int __SendUdxBuff(SOCKADDR * pAddr ,BYTE* pData,int len) = 0;
virtual void PostWriteRequst(BOOL bSignal) = 0;
};
class IUdxConnectData
{
public:
virtual BOOL PutData(BYTE * pData,int iLen) = 0;
virtual BYTE *GetByte() = 0;
virtual int GetLen() = 0;
};
class ISubUdx : public IDebug
{
public:
virtual BOOL IsConnected() = 0;
virtual long GetBuffWindow() = 0;
virtual void SetBuffWindow(long size) = 0;
virtual void ClearBuffWindow() = 0;
virtual BOOL IsFullBuffs() = 0;
virtual void Close() = 0;
virtual BOOL SendBuff(BYTE* pData,int len) = 0;
virtual BOOL SendMsg(BYTE* pData,int len) = 0;
virtual SOCKADDR GetLocalAddr() = 0;
virtual SOCKADDR GetRemoteAddr() = 0;
virtual void SetSink(IUdxSink * pSink) = 0;
virtual IUdxInfo* GetUdxInfo() = 0;
virtual IUdxCfg * GetUdxCfg() = 0;
virtual IUdxConnectData * GetIConnectData() = 0;
virtual __int64 GetKey() = 0;
};
class IUdx : public ISubUdx
{
public:
virtual BOOL Create(short port = 0) = 0;
virtual BOOL Connect(char* ip,short port,BOOL bSync = FALSE) = 0;
virtual BOOL Attach(SOCKET s) = 0;
virtual void Destroy() = 0;
};
class IStreamControl
{
public:
virtual void SetUpLoadSpeed(DWORD speed) = 0;
virtual void SetDownloadSpeed(DWORD speed) = 0;
virtual void EnableControl(BOOL bEnable) = 0;
};
/////////////////////for send file ///////////////////////////////////
#pragma pack( push, 1 )
struct FileInfo
{
__int64 len;
char name[256];
};
#pragma pack( pop )
class IUdxFSink : public IUdxSink
{
public:
virtual int OnNewFile(FileInfo * pInfo,BOOL bContinued){return bContinued + 1;};//1 save new file ,2 continue,else cancel
virtual int OnRemoteCancel(BOOL bSend) = 0;
};
class IUdxSubFile
{
public:
virtual void SendFile(char* filename) = 0;
virtual float GetPercent(BOOL bSend) = 0;
virtual BOOL IsDone(BOOL bSend) = 0;
virtual void SetSaveFileDir(char* savedir) = 0;
virtual void SetSaveFileName(char* savename) = 0;
virtual void SetSink(IUdxFSink * pSink) = 0;
virtual void Cancel(BOOL bSend) = 0;
virtual void Accept(BOOL bContinue) = 0;
};
class IUdxFile : public IUdx,public IUdxSubFile
{
public:
virtual void SetBPTempName(char* strTemp) = 0;
};
////////////////////////end//////////////////////////////////////////////////////////////////////////
class ITransBuff
{
public:
virtual int GetCmd() = 0;
virtual BOOL SetCmd(int cmd) = 0;
virtual int GetBuffCount()= 0;
virtual BOOL GetBuffPoint(long index,BYTE** pData,long &len)= 0;
virtual BOOL AddBuff(BYTE* pData,long len) = 0;
virtual long GetMaxBuffLong() = 0;
};
////////////////////////multserver/////////////////////////////////////////////////////////////
class IMultSocket : public ISubUdx,public IUdxSubFile
{
public:
};
class IMultSocketServerSink
{
public:
virtual BOOL TryAcceptConnect(IMultSocket * pSocket,SOCKADDR * pAddr,BYTE * pData,int iLen){return true;};
virtual void OnRemoteEnject(IMultSocket * pSocket,SOCKADDR * pAddr,BYTE * pData,int iLen){};
virtual void OnConnected(IMultSocket * pSocket){};
virtual void OnUdxReadEvent(IMultSocket * pSocket,BYTE* pData,long len){};
virtual void OnUdxWriteEvent(IMultSocket * pSocket,BYTE* pData,long len){};
virtual void OnUdxReadMsgEvent(IMultSocket * pSocket,BYTE* pData,long len){};
virtual void OnUdxWriteMsgEvent(IMultSocket * pSocket,BYTE* pData,long len){};
virtual void OnRemoteBroken(IMultSocket * pSocket){};
public:
virtual int OnNewFile(IMultSocket *pSocket,FileInfo * pInfo,BOOL bContinued){return bContinued + 1;};//1 save new file ,2 continue,else cancel
virtual int OnRemoteCancel(IMultSocket *pSocket,BOOL bSend){return 0;};
};
class IMultSocketServer
{
public:
virtual BOOL Create(short port = 0) = 0;
virtual void Close() = 0;
virtual void Destroy() = 0;
virtual void CloseSocket(IMultSocket * pSocket) = 0;
virtual IMultSocket* GetSocket(SOCKADDR * pAddr) = 0;
virtual void SetSink(IMultSocketServerSink * pSink) = 0;
virtual void SetBPTempName(char* strTemp) = 0;
virtual IStreamControl * GetStreamControl() = 0;
virtual BOOL NewConnect(char* ip,short port) = 0;
};
///////////////////////////end mult/////////////////////////////////
/////////////////////////////資料報定義/////////////////////////////
class IUdxSinkEx : public IUdxSink
{
public:
virtual void OnUdxReadEventEx(BYTE* pData,long len,unsigned short cmd){};
virtual void OnUdxWriteEventEx(BYTE* pData,long len,unsigned short cmd){};
virtual void OnUdxReadEventEx(ITransBuff * pTransBuff){};
virtual void OnUdxWriteEventEx(ITransBuff * pTransBuff){};
};
class IUdxEx : public IUdx
{
public:
virtual BOOL SendBuffEx(BYTE* pData,int len,unsigned short cmd) = 0;
virtual BOOL SendBuffEx(ITransBuff * pTransBuff) = 0;
virtual void SetSinkEx(IUdxSinkEx * pSink) = 0;
};
class IMultSocketEx
{
public:
virtual IMultSocket* GetIMultSocket() = 0;
virtual BOOL SendBuffEx(BYTE* pData,int len,unsigned short cmd) = 0;
virtual BOOL SendBuffEx(ITransBuff * pTransBuff) = 0;
};
class IMultSocketServerSinkEx
{
public:
virtual BOOL TryAcceptConnect(IMultSocketEx * pSocket,SOCKADDR * pAddr,BYTE * pData,int iLen){return true;};
virtual void OnRemoteEnject(IMultSocketEx * pSocket,SOCKADDR * pAddr,BYTE * pData,int iLen){};
virtual void OnConnected(IMultSocketEx * pSocket){};
virtual void OnUdxReadEvent(IMultSocketEx * pSocket,BYTE* pData,long len){};
virtual void OnUdxWriteEvent(IMultSocketEx * pSocket,BYTE* pData,long len){};
virtual void OnUdxReadMsgEvent(IMultSocketEx * pSocket,BYTE* pData,long len){};
virtual void OnUdxWriteMsgEvent(IMultSocketEx * pSocket,BYTE* pData,long len){};
virtual void OnRemoteBroken(IMultSocketEx * pSocket){};
public:
virtual int OnNewFile(IMultSocketEx *pSocket,FileInfo * pInfo,BOOL bContinued){return bContinued + 1;};//1 save new file ,2 continue,else cancel
virtual int OnRemoteCancel(IMultSocketEx *pSocket,BOOL bSend){return 0;};
public:
virtual void OnUdxReadEventEx(IMultSocketEx * pSocket,BYTE* pData,long len,unsigned short cmd){};
virtual void OnUdxWriteEventEx(IMultSocketEx * pSocket,BYTE* pData,long len,unsigned short cmd){};
virtual void OnUdxReadEventEx(IMultSocketEx * pSocket,ITransBuff * pTransBuff){};
virtual void OnUdxWriteEventEx(IMultSocketEx * pSocket,ITransBuff * pTransBuff){};
};
class IMultSocketServerEx
{
public:
virtual IMultSocketServer*GetIMultSocketServer() = 0;
virtual IMultSocketEx* GetSocketEx(SOCKADDR * pAddr) = 0;
virtual void SetSinkEx(IMultSocketServerSinkEx * pSink) = 0;
};
///////////////////////////////////////end///////////////////////////////////////////////////////
//export functions
//匯出函授體
IUdx * CreateUdx();
void DeleteUdx(IUdx *pUdx);
ITransBuff*CreateTransBuff();
void DeleteTransBuff(ITransBuff*pTransBuff);
IUdxFile* CreateUdxFile();
void DeleteUdxFile(IUdxFile*pFile);
IMultSocketServer* CreateMultiServer();
void DeleteMultiServer(IMultSocketServer* pServer);
IUdxEx * CreateUdxEx();
void DeleteUdxEx(IUdxEx *pUdxEx);
IMultSocketServerEx *CreateMultiServerEx();
void DeleteMultiServerEx(IMultSocketServerEx *pServerEx);
#endif
uj5u.com熱心網友回復:
問題就這樣子丟上來,不合適。沒人有時間幫你做這體力活。建議你試著自己翻譯,有問題,先搜索答案。無法解決,再來提問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113197.html
上一篇:有誰知道FBA???
下一篇:雞兔同籠優化
