//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
// mfcsodlg.h : plik nagłówka
//

/////////////////////////////////////////////////////////////////////////////
// Okno dialogowe CMfcsockDlg

class CMfcsockDlg : public CDialog
{
// Tworzenie
public:
	CMfcsockDlg(CWnd* pParent = NULL);	// standardowy konstruktor
   void DisplayResults(DWORD dwStartTime, DWORD dwEndTime,
      double dPerfTime, DWORD dwPerfBytesTransmitted,
      double dPerfStats);
   void DoStandardSynchronous(void);
   void DoStandardOverlapped(void);
   void DoCPPOverlapped(void);
   void DoCAsyncSocket(void);
   void DoCSocket(void);
   void DoDatagram(void);
   void DoNamedPipes(void);
   void DoOverlappedPipes(void);
   void DoCPPNamedPipes(void);
   void DoCPPOverlappedPipes(void);
   void DoWNetDlls(void);
   void DoRPC(void);
   BOOL GetHostAddress(LPCSTR lpszHost, 
                       LPCSTR lpszService,
                       LPCSTR lpszProto);

// Dane okna dialogowego
	//{{AFX_DATA(CMfcsockDlg)
	enum { IDD = IDD_MFCSOCK_DIALOG };
	UINT	m_nPacketSize;
	UINT	m_nNumPackets;
	CString	m_szTargetServer;
   CString  m_szOSVersion;
	//}}AFX_DATA

	// Wygenerowana przez ClassWizard funkcja wirtualna zastępuje
	//{{AFX_VIRTUAL(CMfcsockDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// Obsługa DDX/DDV
	//}}AFX_VIRTUAL

// Implementacja
protected:
	HICON m_hIcon;
   SOCKADDR_IN m_sin;
   UINT  m_uControlID;   // Wykonywany test
   enum {RECV_1, RECV_2, SEND_1, SEND_2};
   HANDLE m_hWNetUser;
   CNamedPipesServer *m_pNamedPipesServer;
   static BOOL WINAPI PipesReceiveCallback(LPBYTE lpData,
      DWORD dwDataLength, HANDLE hConnection);
   static TCHAR m_szComputerName[MAX_COMPUTERNAME_LENGTH + 1];

#ifdef _USE_WINSOCK2_
   HINSTANCE m_hSocketsLib;
   LPFN_WSASTARTUP m_lpfnWSAStartup;
   LPFN_WSACLEANUP m_lpfnWSACleanup;
#endif

	// Wygenerowane funkcje mapy wiadomości
	//{{AFX_MSG(CMfcsockDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	virtual void OnOK();
	afx_msg void OnCasyncSocket();
	afx_msg void OnCsocket();
	afx_msg void OnStandardOverlapped();
	afx_msg void OnStandardSynchronous();
	afx_msg void OnDatagram();
	afx_msg void OnKillfocusPacketSize();
	afx_msg void OnCppOverlapped();
	afx_msg void OnNamedPipes();
	afx_msg void OnOverlappedPipes();
	virtual void OnCancel();
	afx_msg void OnWnetDlls();
	afx_msg void OnCppNamedPipes();
	afx_msg void OnCppOverlappedPipes();
	afx_msg void OnDouble();
	afx_msg void OnRpc();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};
