Шаг 12 - Делаем Log файл

Первым делом создадим пункт меню Tools - Options, где будем указывать всякие опции, в том числе и создание лог файла. Переходите на меню в вкладке Resource и используйте IDR_MAINFRAME для редактирования пунктов меню. Удалите меню File и Edit.

gif/12_1.gif (919 b)

Создадим реакцию на его выбор в классе CHTTPServerView

void CHTTPServerView::OnToolsOptions() 
{
	// TODO: Add your command handler code here
	
}

Надо создать диалоговое окно и создать для него класс:

gif/12_2.gif (4404 b)

Установить кнопочку выбора check box и для неё создать переменную BOOL m_LogFile;. В конструкторе она инициализируется как

CToolsOptios::CToolsOptios(CWnd* pParent /*=NULL*/)
	: CDialog(CToolsOptios::IDD, pParent)
{
	//{{AFX_DATA_INIT(CToolsOptios)
	m_LogFile = FALSE;
	//}}AFX_DATA_INIT
}

Заведем стандартную переменную с именем лог файла:

......
#define PORT_ADDR 80
#define QUEUE_SIZE 25
#define NAMEFILE "FirstStepServer.log"

class CSeverWinSock 
......

И в классе CServerWinSock переменную, которая будет указывать на то, что нужно вести лог файл.

......
class CSeverWinSock  
{
public:
	BOOL TestLogFile;
	void SendData(LPSTR buff);
......

Начальная инициализация:

CSeverWinSock::CSeverWinSock()
{
	TestLogFile=FALSE;
}

Организуем вызов диалога, но сначала опишем ссылку на класс.

#include "ToolsOptios.h"

////////////////////////
// CHTTPServerView

И вызов диалогового окна.

void CHTTPServerView::OnToolsOptions() 
{
	CToolsOptios ctopt;
	ctopt.m_LogFile=HTTPServer.TestLogFile;
	if (ctopt.DoModal()==IDOK)
		HTTPServer.TestLogFile=ctopt.m_LogFile;
}

Для создания log файла создадим класс CLogFile. Используя этот класс мы и будет писать информацию в файл.

class CLogFile : public CFile
{
public:
	BOOL Create();
	CString csFileName;
	BOOL write(CString  writeString);
	CLogFile();
	virtual ~CLogFile();
};

Подключим его описание к реализации класса CServerWinSock.

// SeverWinSock.h: interface for the CSeverWinSock class.
////////////////////////////////////////////////////////

//......

#include "winsock.h"
# include "LogFile.h"

Обьявим его в классе:

//......
class CSeverWinSock  
{
public:
	CLogFile cLogFile;
//......

При инициализации в переменную класса CLogFile передаем имя файла:

CSeverWinSock::CSeverWinSock()
{
	TestLogFile=FALSE;
	cLogFile.csFileName=NAMEFILE;
	cLogFile.Create(); 
}

Процедура записи:

BOOL CLogFile::write(CString writeString)
{
	CFile file(csFileName, CFile::modeNoTruncate | CFile::modeWrite);
	file.SeekToEnd(); 
	writeString=writeString+"\r\n";
	file.Write(writeString.GetBufferSetLength(
		writeString.GetLength()),writeString.GetLength());  
	file.Close();
	return TRUE;
}

В проекте есть реализация всех записей в лог на данный момент. Мы постоянно будем расширять количество информации помещаемое в лог файл для изучения соединения и его процесса. Пока там отражаются только самые важные события.

Вот пример пример лог файла

09 : 13 :04
Start WinSock
09 : 13 :04
uuobat
09 : 13 :04
Create Soket
09 : 13 :04
bind
09 : 13 :04
WSAAsyncSelect 
09 : 13 :04
Listen 
09 : 13 :05
StopServer
09 : 13 :05
Close Socket

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 20.01.2000