From c90d55ec2adeb5864f9629116f735457f296009a Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sat, 7 Jul 2012 22:13:58 +0000 Subject: CmdLine: adopted, MimCmd not adopted yet git-svn-id: http://svn.miranda-ng.org/main/trunk@839 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/CmdLine/hooked_events.cpp | 113 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 plugins/CmdLine/hooked_events.cpp (limited to 'plugins/CmdLine/hooked_events.cpp') diff --git a/plugins/CmdLine/hooked_events.cpp b/plugins/CmdLine/hooked_events.cpp new file mode 100644 index 0000000000..6ccac9080a --- /dev/null +++ b/plugins/CmdLine/hooked_events.cpp @@ -0,0 +1,113 @@ +/* +CmdLine plugin for Miranda IM + +Copyright © 2007 Cristian Libotean + +This program 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 2 +of the License, or (at your option) any later version. + +This program 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 this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "commonheaders.h" + +HANDLE hModulesLoaded; +HANDLE hOptionsInitialize; +HANDLE hShutdown; +HANDLE hProtoAck; + +int bShouldProcessAcks = FALSE; + +ACKDATA acks[50] = {0}; +int cAcks = sizeof(acks) / sizeof(acks[0]); + +int HookEvents() +{ + hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); + hShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, OnShutdown); + hProtoAck = HookEvent(ME_PROTO_ACK, OnProtoAck); +// hOptionsInitialize = HookEvent(ME_OPT_INITIALISE, OnOptionsInitialise); + + return 0; +} + +int UnhookEvents() +{ + UnhookEvent(hModulesLoaded); + UnhookEvent(hShutdown); + UnhookEvent(OnProtoAck); +// UnhookEvent(hOptionsInitialize); + + return 0; +} + +int OnModulesLoaded(WPARAM wParam, LPARAM lParam) +{ + StartServer(); + + return 0; +} + +int OnShutdown(WPARAM wParam, LPARAM lParam) +{ + SetEvent(heServerClose); //tell the listening server to stop + + return 0; +} + +int QueueAck(ACKDATA *ack) +{ + int i; + for (i = cAcks - 1; i > 0; i--) + { + acks[i] = acks[i - 1]; + } + + acks[0] = *ack; + + return 0; +} + +int ClearAckQueue() +{ + memset(acks, 0, cAcks * sizeof(ACKDATA)); + + return 0; +} + +ACKDATA *GetAck(HANDLE hProcess) +{ + int i; + for (i = 0; i < cAcks; i++) + { + if (acks[i].hProcess == hProcess) + { + return &acks[i]; + } + } + + return NULL; +} + +int OnProtoAck(WPARAM wParam, LPARAM lParam) +{ + if (bShouldProcessAcks) + { + ACKDATA *ack = (ACKDATA *) lParam; + if ((ack) && (ack->type == ACKTYPE_MESSAGE)) //if it's a message ack + { + QueueAck(ack); + } + } + + return 0; +} \ No newline at end of file -- cgit v1.2.3