00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 #include "stdafx.h"
00028 #include "SocketPoolSocket.h"
00029 
00030 #include "ErrorHandlerMacros.h"
00031 #include "SocketPool.h"
00032 
00033 KOMODIA_NAMESPACE_START
00034 
00035 #define CSocketPoolSocket_Class "CSocketPoolSocket"
00036 
00037 CSocketPoolSocket::CSocketPoolSocket(CSocketPool* pFather) : CTCPSocketAsync(FALSE),
00038                                                              m_usPort(0),
00039                                                              m_pFather(pFather)
00040 {       
00041     try
00042     {
00043         
00044         SetName(CSocketPoolSocket_Class);
00045     }
00046     ERROR_HANDLER("CSocketPoolSocket")
00047 }
00048 
00049 CSocketPoolSocket::~CSocketPoolSocket()
00050 {
00051 }
00052 
00053 void CSocketPoolSocket::SetConnectionData(const std::string& rAddress,
00054                                           unsigned short usPort)
00055 {
00056     
00057     m_sAddress=rAddress;
00058     m_usPort=usPort;
00059 }
00060 
00061 BOOL CSocketPoolSocket::Connect()
00062 {
00063     try
00064     {
00065         
00066         if (!Create())
00067         {
00068             
00069             ReportError("Connect","Failed to create socket!");
00070 
00071             
00072             return FALSE;
00073         }
00074 
00075         if (!m_usPort ||
00076             m_sAddress.empty())
00077         {
00078             
00079             ReportError("Connect","No connection data!");
00080 
00081             
00082             return FALSE;
00083         }
00084 
00085         
00086         return CTCPSocketAsync::Connect(0,
00087                                         m_sAddress.c_str(),
00088                                         m_usPort);
00089     }
00090     ERROR_HANDLER_RETURN("Connect",FALSE)
00091 }
00092 
00093 BOOL CSocketPoolSocket::OnSocketConnect(int iErrorCode)
00094 {
00095     try
00096     {
00097         
00098         if (!iErrorCode)
00099             
00100             m_pFather->SocketConnected(this);
00101         else
00102             
00103             m_pFather->SocketClosed(this);
00104 
00105         
00106         return TRUE;
00107     }
00108     ERROR_HANDLER_RETURN("OnSocketConnect",TRUE)
00109 }
00110 
00111 CSocketPoolSocket::PoolSocketID CSocketPoolSocket::GetID()const
00112 {
00113     return 0;
00114 }
00115 
00116 BOOL CSocketPoolSocket::OnSocketClose(int iErrorCode)
00117 {
00118     try
00119     {
00120         
00121         m_pFather->SocketClosed(this);
00122 
00123         
00124         return TRUE;
00125     }
00126     ERROR_HANDLER_RETURN("OnSocketClose",TRUE)
00127 }
00128 
00129 void CSocketPoolSocket::ClosePoolSocket()
00130 {
00131     try
00132     {
00133         
00134         Close();
00135 
00136         
00137         m_pFather->SocketClosed(this);
00138     }
00139     ERROR_HANDLER("ClosePoolSocket")
00140 }
00141 
00142 KOMODIA_NAMESPACE_END