Если размер access.log изменился - проигрывается тон

Компьютеры, программы, периферия, коммуникации, интернет, программирование и т.п. Ранее назывался Hard-n-Soft.
Сообщение
Автор
Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 0 Сообщение Wiz » 06 июн 2010 22:23

Написал программу для оперативной слежки за файлом (access.log)

Если access.log меняется, автоматически из него считывают последние строки
и на колонки воспроизводится звук. Регулируется высота тона и громкость.

Кому-то может пригодиться.


Изображение

Ссылка для скачивания:

http://zx3267.homeip.net/programms/chec ... esslog.rar

Путь прописан в файле checkacesslog.ini

Выход из программы кнопка с буквой X

Стандартный крестик красный не убивает программу, а скрывает
окно в трее остается висеть значок

Кнопка T - тестирование уровня и высоты краткого тона

Пока глюк не исправлен с исключением, так все работает
Последний раз редактировалось Wiz 06 июн 2010 22:31, всего редактировалось 1 раз.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 1 Сообщение Wiz » 06 июн 2010 22:27

Если кто может помочь, я с исключениями мало работал

вот этот код

file_size=file.GetLength();

file.Seek(file_size - bsize, 0);

try
{

//вот тут бывает исключение, когда апач пишет в файл access.log
file.Read(logbuf, bsize);

}

catch(CException)
{

strcpy((char*)logbuf, "expection");
}

//Почему то исключение не отлавливается,
//а выходит за пределы и программа вылетает.

file.Close();

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 2 Сообщение Wiz » 06 июн 2010 23:13

Ответом на законный вопрос, зачем нужна эта программа будет следующее.

Сижу я за своим компом, если было обращение к моему zx3267.homeip.net серверу, я услышу "бип", зайду в фар и сразу вижу что там кто у меня смотрит на сайте. Как вот тут например:

Изображение

ХЗ
Экономный
Благодарил (а): 158 раз
Поблагодарили: 347 раз

№ 3 Сообщение ХЗ » 06 июн 2010 23:37

2: Wiz:
да, для ББ это незаменимая прога. Если бы она меняла тон при каждом заходе, был бы нормальный иммитатор записей для спектрума :)

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 4 Сообщение Wiz » 06 июн 2010 23:39

3: X3:

я просто очень времени дома проважу,
хочу сделать через речевое апи проигрывание названия айпи адреса и имя скачиваемого файла из последней строки access.log. Будет постоянно че то говорить.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 5 Сообщение Wiz » 06 июн 2010 23:50

Ну сейчас я знаю, что если слышно два последователных "бип бип" значит кто-то на одном из форумов прочел мое сообщение и загрузилась подпись sarovinfo1.png sarovinfo2.png это для sarov.info, aing1.png aing2.png - для aing.ru, psycho1.png psycho2.png - это для психореаниматологии.

Если очень длинная последовательность бипов - зашли на сайт. как например:

Изображение

там видно по меткам времени скорость проигрывания последовательности бипов

BadBlock
Аватара пользователя
Благодарил (а): 1586 раз
Поблагодарили: 8125 раз

№ 6 Сообщение BadBlock » 07 июн 2010 03:33

X3 пишет:
> да, для ББ это незаменимая прога. Если бы она меняла тон при каждом заходе, был бы нормальный иммитатор записей
> для спектрума :)

Не забудь, отдельный писк на каждый запрос каждой картинки. ))

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 7 Сообщение Wiz » 07 июн 2010 03:56

Вроде бы проблема с исключением решена так:

Изображение

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 8 Сообщение Wiz » 17 мар 2012 12:09

Продолжаю разрабатывать программное обеспечение CheckAccessLog

Что я сделал ?

то есть не я сделал, а Он

Изображение

вот ваш код:

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 9 Сообщение Wiz » 17 мар 2012 12:11

Код: Выделить всё

void CCheckAccessLogDlg::OnTimer(UINT nIDEvent) 
{
	WIN32_FIND_DATA finddata;

	in_addr last_ip={0};
	in_addr addr_last;
	in_addr addr = { 0 };

	HANDLE hfind=FindFirstFile(path_for_thread, &finddata);

	if (hfind == INVALID_HANDLE_VALUE) 
	{
		return;
	}

	FindClose(hfind);

	if (need_update_log)
	{
		UpdateData(TRUE);

		need_update_log=true;

		m_log=_T("");

		CString txt;

		m_file_size=finddata.nFileSizeLow ;


		char tema[32];
		bool temaok=false;
	
		for(int i=0; i<bsize; i++)
		{

			char b[bsize];
			int t=0, k=0;

			char ip[64];
			

			ip[0]=0;

			bool ip_ok=false;

			bool noip=false;

			
		

			if (logbuf[i]==0x0a)
			{
				temaok=false;
				for(int j=i+1; j<bsize; j++)
				{
					char sym=logbuf[j];
					char sym2=logbuf[j+1];
					


					if (!temaok)
					{
						if (sym=='&' && sym2=='t')
						{
							int p=0;
							for(int v=j+3; v<j+3+15; v++,p++)
							{
								char n=logbuf[v];
								tema[p]=n;

								if (n=='\"' || n=='&' || n==' ' || n==0x0d || n==0x0a) 
								{
									tema[p]=0; 
									temaok=true;
								}
							}
						}
					}

					if (sym=='\n') break;
					else 
					{
						b[t]=sym;
						ip[k]=sym;

						if (sym=='\r') sym=' ';
						if (sym==' ') {ip[k]=0, ip_ok=true;}

						t++;
						if (!ip_ok) k++;
					}
				}

				b[t]=0;

				if (j!=bsize)
				{
				
	
					hostent * remoteHost=NULL;
				

					addr.s_addr = inet_addr(ip);


				//if (addr.S_un.S_addr!=addr_last.S_un.S_addr)
				//{
					//remoteHost = gethostbyaddr((char*)&addr, 4, AF_INET);
				//}

				addr_last=addr;


				if (remoteHost)
				{
					m_log+=remoteHost->h_name;
					m_log+=" ### ";

					////if (addr.S_un.S_un_b.s_b1 != 127)
					{
						last_ip=addr;
					}
				}

				
				m_log+="tema: ";
				m_log+=tema;
				m_log+=" -> ";
				m_log+=b;
				m_log+="\n";
				

				}
				
			}
		}



		UpdateData(FALSE);


		PlayIP(
		addr_last.S_un.S_un_b.s_b1, 
		addr_last.S_un.S_un_b.s_b2,
		addr_last.S_un.S_un_b.s_b3,
		addr_last.S_un.S_un_b.s_b4,
		1*volume/100.0);

  
		sndPlaySound(CString("voice\\")+tema+".wav",SND_ASYNC);
	
/*	PlayIP(
		23,
		54,
		26,
		16,
		1);*/

		need_update_log=false;
	}

	old_size=finddata.nFileSizeLow;	

	CDialog::OnTimer(nIDEvent);
}

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 10 Сообщение Wiz » 17 мар 2012 12:20

Как видно из кода, при обращении к серверу zx3267.homeip.net, который, как я думаю, находится у меня на рабочем столе, программное обеспечение CheckAcessLog извлекает из GET запроса Apache сервера IP адрес, &t= номер темы, затем IP адрес проигрывается голосом, а вместо номера темы проигрывается файл, например как видно из рисунка, при заходе (так и хочется сказать, что на посадку, но я, то есть не я, не скажу это) в тему с номером &t=45444 проигрывается файл voice/45444.wav

Сам файл сгенерирован программой, так называемой, Говорилкой (человеческим голосом)

вот примеры:
http://zx3267.homeip.net/mp3/voice_tema/105591.wav
http://zx3267.homeip.net/mp3/voice_tema/106221.wav
http://zx3267.homeip.net/mp3/voice_tema/45444.wav

затем через FM трансмиттер, аудиоинформация (IP адрес клиента, название темы) передается мне мгновенно если я нахожусь в зоне приема FM радиочастоты (во дворе берет, у соседей я не знаю кажется тоже)

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 11 Сообщение Wiz » 17 мар 2012 12:31

и, последнее, вот код генерации звука из IP адреса и пример звука

http://zx3267.homeip.net/programms/chec ... output.wav

Код: Выделить всё

#include "stdafx.h"

#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "cstring.h"
//#include "aon.h"
//#include "playpcm.h"


int SoundPlay(char*,int,int,double);

char * fileout="output.pcm";

int DIAL_LEN;

int counter=0;

//float FloatPointer,PackStep;

const Freq=44100;
int BufPointer=0;

ofstream ofl;
ifstream dial;

int SumFileSize=0;

void List(STRING)
{
}

void fatal(char*)
{
}

long GetFileSize(STRING file)
{

	ifstream ifl(file.Get(),ios::binary);
	if (!ifl)
	{
			List(STRING("Невозможно узнать размер файла: '")+file); 
			return 0;
	}
	ifl.seekg(0,ios::end);
	long flen=ifl.tellg();
	ifl.close();
	return flen;
}

char *digit0_9[]=
{
	"0.pcm",
	"1.pcm",
	"2.pcm",
	"3.pcm",
	"4.pcm",
	"5.pcm",
	"6.pcm",
	"7.pcm",
	"8.pcm",
	"9.pcm"
};

char *digit10_19[]=
{
	"10.pcm",
	"11.pcm",
	"12.pcm",
	"13.pcm",
	"14.pcm",
	"15.pcm",
	"16.pcm",
	"17.pcm",
	"18.pcm",
	"19.pcm",
};

char * digit20_90[]=
{
	NULL,
	NULL,
	"20.pcm",
	"30.pcm",
	"40.pcm",
	"50.pcm",
	"60.pcm",
	"70.pcm",
	"80.pcm",
	"90.pcm"
};


void AddToFile(char * path, char * s, double speed)
{
	char str[256];
	strcpy(str,"numplay\\");
	strcat(str,s);


	ifstream ifl(str,ios::binary);

	if (!ifl)
	{
		List("AddToFile() - can't open ifl");
		return;
	}

	ofstream ofl;
	ofl.open(path, ios::binary | ios::app);
	if (!ofl)
	{
		List("AddToFile() - can't open ofl");
	}
	
	ofl.seekp(0,ios::end);
	

	do
	{
		//берем из файла байт
		char n=ifl.get();

	//обязательно проверить, откуда берется 255 !
		//if (n!=255 && n!=0)
		if (ifl.eof()) break;

		ofl.put(n);

	}  while(1);


	ofl.close();
}




//добавляет к файлу данные
void AddFile(char *s, int calcsz, int GenerateTone)
{
	char str[256];
	strcpy(str,"numplay\\");
	strcat(str,s);


	if (calcsz)
	{
		SumFileSize+=GetFileSize(str);
		return;
	}

	ifstream ifl(str,ios::binary);
	if (!ifl)
	{
		List("AddFile() - can't open file");
		return;
	}


	do
	{
		//берем из файла байт
		char n=ifl.get();

	//обязательно проверить, откуда берется 255 !
		//if (n!=255 && n!=0)
		if (ifl.eof()) break;

/*
		BufPointer=FloatPointer;
		SoundBuf[BufPointer*2]=n;
		SoundBuf[BufPointer*2+1]=

		if (FloatPointer>2*Freq) {List("BufPointer>=2*Freq"); break;}
			 */
		ofl.put(n);


		if (GenerateTone)	ofl.put(n);
      else ofl.put(char(127));



	}  while(1);


}

void play_two_digit(char * path_file, int x)
{
	double speed=1.0;
	if (x>=0 && x<=9)
	{
		AddToFile(path_file, digit0_9[0], speed);
		AddToFile(path_file, digit0_9[x], speed);
	}
	else if (x>=10 && x<=19)
	{
		AddToFile(path_file, digit10_19[x-10], speed);
	}
	else if (x>=20 && x<=99)
	{
		AddToFile(path_file, digit20_90[x/10], speed);
		int k=x%10;
		if (k)
		AddToFile(path_file, digit0_9[x%10], speed);

		if (!k && (x/10)>=6 )
		{
			AddToFile(path_file, digit0_9[0], speed);
		}
	}
}


void playtwo(int x, int CalcSize,int GenerateTone)
{
	if (x>=0 && x<=9)
	{
		AddFile(digit0_9[0],CalcSize,GenerateTone);
		AddFile(digit0_9[x],CalcSize,GenerateTone);
	}
	else if (x>=10 && x<=19)
	{
		AddFile(digit10_19[x-10],CalcSize,GenerateTone);
	}
	else if (x>=20 && x<=99)
	{
		AddFile(digit20_90[x/10],CalcSize,GenerateTone);
		int k=x%10;
		if (k)
		AddFile(digit0_9[x%10],CalcSize,GenerateTone);

		if (!k && (x/10)>=6 )
		{
			AddFile(digit0_9[0],CalcSize,GenerateTone);
		}
	}

	else if (x>100)
	{
		char buf[32];
		itoa(x,buf,10);
		
		
		AddFile(digit0_9[buf[0]-'0'],CalcSize,GenerateTone);
		AddFile(digit0_9[buf[1]-'0'],CalcSize,GenerateTone);
		AddFile(digit0_9[buf[2]-'0'],CalcSize,GenerateTone);
	}
}

//52912
void NumberToPcm(int n, int x,int y, int GenerateTone)
{
	counter=BufPointer=0;

	//начинаем играть файл

	ofl.open("output.pcm", ios::binary);

	DIAL_LEN=GetFileSize("dial440.pcm");
	dial.open("dial440.pcm", ios::binary);


	if (!dial) {List("can't open dial440.pcm");return;}
	if (!ofl) {		List("can't create distination file");return;	}

	AddFile(digit0_9[n], FALSE, GenerateTone);
	if (x!=-1) playtwo(x, FALSE,GenerateTone);
	if (y!=-1) playtwo(y, FALSE,GenerateTone);

	char silen[1024];
	for(int j=0; j<sizeof(silen); j++) silen[j]=char(127);
	ofl.write(silen,sizeof(silen));

	ofl.close();
	dial.close();
}


void PlayIP(int a,int b,int c,int d, double amplif)
{
	int GenerateTone=1;
	ofl.open("output.pcm", ios::binary);
	playtwo(a, FALSE,GenerateTone);	 
	playtwo(b, FALSE,GenerateTone);	 
	playtwo(c, FALSE,GenerateTone);	 
	playtwo(d, FALSE,GenerateTone);

	ofl.close();

	SoundPlay("output.pcm",11025,2, amplif);

}

void PlayTelephonNumber( STRING Number, int GenTon, double amplif)
{
	 List("Clock generate");
	if (Number.Len()==5)
	{
	// для 7 и 6 не будет правильно
	int x=Number[0]-'0',
	 y=(Number[1]-'0')*10+Number[2]-'0',
	 z=(Number[3]-'0')*10+Number[4]-'0';
	NumberToPcm(x,y,z,0);	//FASLE- не
	}
	else
	{
		ofl.open("output.pcm", ios::binary);
	for(int i=0; i<Number.Len(); i++)
	 {
		AddFile(digit0_9[Number[i]-'0'], FALSE, GenTon);
	 }
	 ofl.close();
	}

	 SoundPlay("output.pcm",11025,2, amplif);

}



Вернуться в «Компьютерный форум»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей