2010年1月18日 星期一

CuSocketFile - A CuFile object used for sending and receiving data across a network via Windows Sockets

// CuSocketFile - A CuFile object used for sending and receiving data across a network via Windows Sockets.

CuSocket sk;
CuSocketFile skFile(&sk);

CuFile *pFile = &skFile;

pFile->Write(...);
pFile->Read(...);



// CuSocketFile.h

class CuSocketFile : public CuFile  
{
    CuSocket* m_pSocket;

public:

    CuSocketFile( CuSocket* pSocket);
    ~CuSocketFile();

public:
    virtual int Write(const void* lpBuf, UINT nCount);
    virtual int Read(void* lpBuf, UINT nCount);

};



// CuSocketFile.cpp

CuSocketFile::~CuSocketFile()
{

}

CuSocketFile::CuSocketFile(CuSocket *pSocket)
{

    m_pSocket = pSocket;

}

// rc == SOCKET_ERROR 在外部在處理
int CuSocketFile::Read(void *lpBuf, UINT nCount)
{

    if( lpBuf == NULL ) 
        return 0;

    return m_pSocket->Receive(lpBuf, nCount, 0);

}

int CuSocketFile::Write(const void *lpBuf, UINT nCount)
{

    if( lpBuf == NULL ) 
        return 0;
        
    retrun m_pSocket->Send((const TCHAR*)lpBuf , nCount, 0);

}
使用繼承 public CuFile , 在對TheApp做多型, TheApp並不需要知道是LocalFile 還是 Remote Socket.
這裡有個很特別的問題, CuFile 跟 CuSocketFile 除了介面相同外, 並沒有任何的程式碼相容.
因此需要繼承的並不是CuFile實體, 而是
class CuFile : public IuFile
class CuSocketFile : public IuFile
繼承 CuFile 的介面 IuFile

沒有留言:

張貼留言