summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/SmartAutoReplier/MessagesHandler.h
blob: 2d9240f0d5aa48f8f9c7a1ea55540e101afe2d52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 *  Smart Auto Replier (SAR) - auto replier plugin for Miranda IM
 *
 *  Copyright (C) 2004 - 2012 by Volodymyr M. Shcherbyna <volodymyr@shcherbyna.com>
 *
 *      This file is part of SAR.
 *
 *  SAR is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  SAR is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with SAR.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "settingshandler.h"
#include "interfaces\ISingletone.h"

#include <map>
using namespace std;

typedef struct _CONTACT_METAINFO
{
	LARGE_INTEGER StartTime;
	LARGE_INTEGER DiffTime;
}CONTACT_METAINFO,*PCONTACT_METAINFO;

typedef std::map<HANDLE, CONTACT_METAINFO> ContactsMap;
typedef std::pair<HANDLE, CONTACT_METAINFO> ContactsPair;
const __int64 nano100SecInSec = (__int64)10000000; 

/// hooks def...
#define HOOKS_NUM	 1

INT WINAPI ContactsFetcherThread(LPVOID lp);

class CMessagesHandler : public IMSingeltone<CMessagesHandler>
{
	friend INT WINAPI ContactsFetcherThread(LPVOID lp);
public:
	CMessagesHandler(void);
	~CMessagesHandler(void);
public:
	void HookEvents(void);
	void UnHookEvents(void);
	void WriteToHistory(LPTSTR lpMsg, HANDLE hContact);
	CSettingsHandler & getSettings(void);
	bool AllowReply(HANDLE hContact);
	void MakeAction(bool bEnable);
	static LPTSTR GetContactName(HANDLE hContact);
	static int SendProtoMess(HANDLE hContact, LPCSTR szMess);	
protected:	// hooks procs
	static int EventAddHook(WPARAM wp, LPARAM lp);	
private:
	bool m_bInited;
private:
	HANDLE				m_hEvents[HOOKS_NUM];
	CSettingsHandler	m_settings;
	ContactsMap		    m_contacts;
	CRITICAL_SECTION	m_critSect;
	HANDLE				m_hFetcherThread;
	HANDLE				m_hEnableEvent;
	bool				m_bShouldWork;
};