⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketsengine.h

📁 Symbian第二版断点续传代码,可以节省用户下载流量
💻 H
字号:
/* Copyright (c) 2001, Nokia. All rights reserved */

#ifndef __SOCKETSENGINE_H__
#define __SOCKETSENGINE_H__

#include <in_sock.h>
#include "TimeOutNotifier.h"
#include "EngineNotifier.h"
#include "Sockets.hrh"

class CSocketsReader;
class CSocketsWriter;
class CTimeOutTimer;
class MUINotifier;

/*! 
  @class CSocketsEngine
  
  @discussion This class is the main engine part of the sockets application.
  It establishes a TCP connection using its server name and port number (performing a DNS lookup
  operation first, if appropriate).
  It creates instances of separate active objects to perform reading from, and writing to, the socket.
  */
class CSocketsEngine : public CActive, public MTimeOutNotifier, public MEngineNotifier
    {
public: // new methods
/*!
  @function NewL
   
  @discussion Create a CSocketsEngine object
  @param aConsole console to use for ui output
  @result a pointer to the created instance of CSocketsEngine
  */
	static CSocketsEngine* NewL(MUINotifier& aConsole);

/*!
  @function NewLC
   
  @discussion Create a CSocketsEngine object
  @param aConsole console to use for ui output
  @result a pointer to the created instance of CSocketsEngine
  */
    static CSocketsEngine* NewLC(MUINotifier& aConsole);

/*!
  @function ~CSocketsEngine
  
  @discussion Destroy the object and release all memory objects
  */
	~CSocketsEngine();

/*!
  @function ConnectL

  @discussion Initiate connection of socket, using iServerName and iPort
  */
    void ConnectL();

/*!
  @function Disconnect

  @discussion Disconnect socket
  */
    void Disconnect();

/*!
  @function WriteL

  @discussion Write data to socket
  @param aData data to be written
  */
	void WriteL(const TDesC8& aData);

/*!
  @function Read

  @discussion Initiate read of data from socket
  */
	void Read();

/*!
  @function SetServerName

  @discussion Set name of server to connect to
  @param aName new server name
  */
    void SetServerName(const TDesC& aName);

/*!
  @function ServerName

  @discussion Get server name
  @result name of server
  */
    const TDesC& ServerName() const;

/*!
  @function SetPort

  @discussion Set port number to connect to
  @param aPort new port number
  */
    void SetPort(TInt aPort);

/*!
  @function Port

  @discussion Get port number
  @result port number
  */
    TInt Port() const;

/*!
  @function Connected

  @discussion Is socket fully connected?
  @result true if socket is connected
  */
    TBool Connected() const;

public: // from MTimeOutNotifier
/*!
  @function TimerExpired

  @discussion The function to be called when a timeout occurs
  */
	void TimerExpired();

public: // from MEngineNotifier
/*!
  @function ReportError

  @discussion Report a communication error
  @param aErrorType error type
  @param aErrorCode associated error code
  */
	void ReportError(MEngineNotifier::TErrorType aErrorType, TInt aErrorCode);

/*!
  @function ResponseReceived

  @discussion Data has been received on the socket and read into a buffer
  @param aBuffer the data buffer
  */
	void ResponseReceived(const TDesC8& aBuffer);

protected: // from CActive
/*!
  @function DoCancel
   
  @discussion cancel any outstanding operation
  */
	void DoCancel();

/*!
  @function RunL
   
  @discussion called when operation complete
  */
    void RunL();

private: // New methods
/*!
  @function CSocketsEngine
  
  @discussion Perform the first phase of two phase construction 
  @param aConsole the console to use for ui output
  */
	CSocketsEngine(MUINotifier& aConsole);

/*!
  @function ConstructL
  
  @discussion Perform the second phase construction of a CSocketsEngine 
  */
    void ConstructL();

/*!
  @function ConnectL
   
  @discussion initiate a connect operation on a socket
  @param aAddr the ip address to connect to
  */
	void ConnectL(TUint32 aAddr);

/*!
  @enum TSocketsEngineState

  @discussion Tracks the state of this object through the connection process
  @value ENotConnected The initial (idle) state
  @value EConnecting A connect request is pending with the socket server
  @value EConnected A connection has been established
  @value ELookingUp A DNS lookup request is pending with the socket server
  */
	enum TSocketsEngineState 
	    {
			ENotConnected,
			EConnecting,
			EConnected,
			ELookingUp
	    };

/*!
  @function ChangeStatus
  @discussion handle a change in this object's status
  @param aNewStatus new status
  */
    void ChangeStatus(TSocketsEngineState aNewStatus);

/*!
  @function Print
  @discussion display text on the console
  @param aDes text to display
  */
    void Print(const TDesC& aDes);

private: // Member variables

    /*! @const The maximum time allowed for a lookup or connect requests to complete */
    static const TInt KTimeOut;

    /*! @const The initial port number displayed to the user */
    static const TInt KDefaultPortNumber;

    /*! @var this object's current status */
	TSocketsEngineState         iEngineStatus;

    /*! @var console for displaying text etc */
	MUINotifier&                iConsole;

    /*! @var the actual socket */
	RSocket                     iSocket;

    /*! @var active object to control reads from the socket */
	CSocketsReader*             iSocketsReader;

    /*! @var active object to control writes to the socket */
	CSocketsWriter*             iSocketsWriter;

    /*! @var the socket server */
	RSocketServ                 iSocketServ;

    /*! @var DNS name resolver */
	RHostResolver               iResolver;

    /*! @var The result from the name resolver */
	TNameEntry                  iNameEntry;

    /*! @var The anme record found by the resolver */
	TNameRecord                 iNameRecord;

    /*! @var timer active object */
	CTimeOutTimer*              iTimer;

    /*! @var The address to be used in the connection */
	TInetAddr                   iAddress;

    /*! @var port number to connect to */
    TInt                        iPort;

    /*! @var server name to connect to */
    TBuf<KMaxServerNameLength>  iServerName;
    };

#endif // __SOCKETSENGINE_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -