// WisdomWClient.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include <afxdllx.h>
#include "WisdomWClient.h"#include <atlconv.h>#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endifconst int SOCK_TCP = 0;
const int SOCK_UDP  = 1;CSocketManager m_SocketManager;
SockAddrIn    m_SockPeer;
CString m_strPort = _T("27874");
int m_nSockType = SOCK_TCP;CString strTime,TempName,FileName,IPStr;CEdit m_ctlMsgList;int  m_nLinkMode = 1;//m_nLinkMode ; // Client
//m_strPort = ;
//m_nSockType ; // default TCPstatic AFX_EXTENSION_MODULE WisdomWClientDLL = { NULL, NULL };extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("WISDOMWCLIENT.DLL Initializing!\n");
if (!AfxInitExtensionModule(WisdomWClientDLL, hInstance))
return 0;

// ClientInit(); new CDynLinkLibrary(WisdomWClientDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("WISDOMWCLIENT.DLL Terminating!\n");
AfxTermExtensionModule(WisdomWClientDLL);
}
return 1;   // ok
}BOOL WINAPI ClientInit()
{
WSADATA WSAData = { 0 };
        if ( 0 != WSAStartup( WSA_VERSION, &WSAData ) )
{
// Tell the user that we could not find a usable
// WinSock DLL.
if ( LOBYTE( WSAData.wVersion ) != LOBYTE(WSA_VERSION) ||
 HIBYTE( WSAData.wVersion ) != HIBYTE(WSA_VERSION) )
 ::MessageBox(NULL, _T("Incorrect version of Winsock.dll found"), _T("Error"), MB_OK);
         WSACleanup();
         return FALSE;
}
   //      AfxOleInit();   //初始化OLE和数据库的连接
         return TRUE;
}
BOOL WINAPI ConnectToServerInit()
{
CString strLocal;
m_SocketManager.GetLocalAddress( strLocal.GetBuffer(256), 256);
strLocal.ReleaseBuffer();
m_SocketManager.SetMessageWindow( &m_ctlMsgList); // Initialize socket manager
m_SocketManager.SetServerState( false ); // run as client
m_SocketManager.SetSmartAddressing( false ); // always send to server
    return true;
}
BOOL WINAPI ConnectToServer(LPSTR IpName)
{
//  m_STA_MESS.SetWindowText("正在和数据库服务器建立连接..."); 
CString strServer;
// GetWindowText(TxtServerAdd, strServer.GetBuffer(256),256);
    strServer = IpName;
bool bSuccess;
if (m_nSockType == SOCK_TCP)
{
bSuccess = m_SocketManager.ConnectTo( strServer, m_strPort, AF_INET, SOCK_STREAM); // TCP
}
else
{
bSuccess = m_SocketManager.ConnectTo( strServer, m_strPort, AF_INET, SOCK_DGRAM); // UDP
}
if (bSuccess && m_SocketManager.WatchComm())
{
// GetDlgItem(IDOK)->EnableWindow( TRUE );
// NextDlgCtrl();
CString strMsg;
if (m_nSockType == SOCK_TCP)
{
strMsg = _T("Connection established with server: ") + strServer;
strMsg += _T(" on port ") + m_strPort + CString("\r\n");
}
else
{
SockAddrIn addrin;
m_SocketManager.GetSockName( addrin ); // just to get our current address
LONG  uAddr = addrin.GetIPAddr();
BYTE* sAddr = (BYTE*) &uAddr;
short nPort = ntohs( addrin.GetPort() );
CString strAddr;
// Address is stored in network format...
strAddr.Format(_T("IP: %u.%u.%u.%u, Port: %d"),
(UINT)(sAddr[0]), (UINT)(sAddr[1]),
(UINT)(sAddr[2]), (UINT)(sAddr[3]), nPort);
strMsg = _T("created:") + strAddr + CString("\r\n");
}
m_SocketManager.GetPeerName( m_SockPeer );
}
return true;
}BOOL WINAPI SendDataToServer(LPSTR SDTS,LPSTR CN,LPSTR MN,LPSTR ANN,
        LPSTR AY,LPSTR MON,LPSTR LT,LPSTR LMN,LPSTR KN)
{
    CString sd;
sd = SDTS;
BYTE byBuffer[256] = { 0 };
CString strText,W1,W2,W3,W4,W5,W6,W7,W8;
W1=CN;W2=MN;W3=ANN;W4=AY;W5=MON;W6=LT;W7=LMN;W8=KN;
//  m_SocketManager.GetLocalName(W1.GetBuffer(256),256);
W1.ReleaseBuffer(); W2.ReleaseBuffer(); W3.ReleaseBuffer(); W4.ReleaseBuffer(); 
W5.ReleaseBuffer(); W6.ReleaseBuffer(); W7.ReleaseBuffer(); W8.ReleaseBuffer(); 
//  Update so that we can retrieve new port number also... :-)
if (sd == "WISDOM")
{
strText = _T("S_M_S^")+W1+"^"+W2+"^"+W3+"^"+W4+"^"+W5+"^"+W6+"^"+W7+"^"+W8;
}
else
{
strText = _T("M_S_M^")+W1+"^"+W2+"^"+W3+"^"+W4+"^"+W5+"^"+W6+"^"+W7+"^"+W8;
}
int nLen = strText.GetLength();
if (nLen > 0)
{
strText += _T("\r\n");
nLen = strText.GetLength() + 1;
USES_CONVERSION;
strcpy((LPSTR)byBuffer, T2CA(strText));
m_SocketManager.WriteComm( byBuffer, nLen, INFINITE);
}
    return true;
}
BOOL WINAPI DeoyCancel()
{
m_SocketManager.StopComm();
if (!m_SocketManager.IsOpen())
{/* PrevDlgCtrl(); */ }
    return true;
}BOOL WINAPI SetHwndSA(HWND hWnd)
{
 m_SocketManager.SetHWND(hWnd);
 return true;
}