// serwevw.h : interface of the CSerwebView class // ///////////////////////////////////////////////////////////////////////////// #define COLUMN_MAX 80 // How many columns to allow for the screen // WWW variables below.. We will read from a file but for now they are gard coded. // WWW variables that will remain.. Don't replace ... #define MAX_CLIENTS 10 // Maximun number of connections to allow #define SEND_BUFFER 300 // How many characters to send at a time .. // State of the sockets below .... #define SOCK_FREE 4 // The socket is not being used . #define WAITING 5 // Waiting for the socket to send information #define SENDING 6 // Sending data to the other server #define SOCK_FULL 7 // All sockets aree in use. Send can msg. #define CLIENT_MSG WM_USER+1 // The clients is crying .. #define INCOMING_MSG WM_USER+2 // The master has closed, or a connections has comed .. #define MAX_IN_BUF 100 // how many chars to receive from client ..... #define SEND_BUF_LEN 200 // How many chars to send at a time .... struct WWWSockDef { short State; // Status of the Socket SOCKET CliSock; CString InBuf; CFile SendFile; char SendBuf[SEND_BUF_LEN]; int HowManyInSendBuf; int OffsetToSend; CTime LastTime; char CliIp[30]; // IP Of client. }; // Misc stuff .......... #define TIME_TO_CHECK (360*60) // Milliseconds to check for inactive connections #define IdEv 20 // ID Event for Timer. #define INACTIVE 2 // No response in over 3 minutes should be killed. ////////////////////////////////////////////////////////////////////// class CSerwebView : public CScrollView { protected: // create from serialization only CSerwebView(); DECLARE_DYNCREATE(CSerwebView) WWWSockDef WWWConv[MAX_CLIENTS+1]; // All conversations going on .... SOCKET WWWServer; // The popetier - controls all connections SOCKET cli_sock; struct sockaddr_in srv_addr, cli_addr; LPSERVENT srv_info; LPHOSTENT host_info; char buf[200]; // All purpose buffer. Usually for error messages. int WWWPort; // Port to listen on int HowManyClients; // similar to app one, but for ease of use, lets redefine it and re get it.... CString SendDir; // From where do we send data ? CString FileNotExistMsg; // File to send if we can't file a file being requested. CString ClosedServerMsg; // File to send if server is closed. CString PeriodAllowedMsg; // File to sedn if user send for a file with .. // Attributes public: CSerwebDoc* GetDocument(); // Operations public: void OnInitialUpdate(); virtual void OnUpdate(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL); virtual void PrintSt(CString StToPrint); virtual void PrintSt(char* AString); virtual void PrintChar(char nChar, char OutputIt = 'n'); // Print just one char .... virtual void ProcessRequest(int SockNumber); virtual void ProcessRead(int SockNumber); virtual void SendBlockOfData(int SockNumber); virtual CString GetFirstString(CString TheString, int WrdToGet); virtual void KillConn(int SockNumber); // Implementation public: virtual ~CSerwebView(); virtual void OnDraw(CDC* pDC); // overridden to draw this view #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif // Generated message map functions protected: //{{AFX_MSG(CSerwebView) afx_msg LRESULT OnWWWClientMsg(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnWWWServerMsg(WPARAM wParam, LPARAM lParam); afx_msg void OnPeriodOk(); afx_msg void OnServerInact(); afx_msg void OnUpdateStat(); afx_msg void OnTimer(UINT nIDEvent); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #ifndef _DEBUG // debug version in serwevw.cpp inline CSerwebDoc* CSerwebView::GetDocument() { return (CSerwebDoc*) m_pDocument; } #endif /////////////////////////////////////////////////////////////////////////////