/* 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 "stdafx.h" int bShouldProcessAcks = FALSE; ACKDATA acks[50] = {0}; int cAcks = sizeof(acks) / sizeof(acks[0]); int HookEvents() { HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); HookEvent(ME_SYSTEM_PRESHUTDOWN, OnShutdown); HookEvent(ME_PROTO_ACK, OnProtoAck); return 0; } int UnhookEvents() { return 0; } int OnModulesLoaded(WPARAM, LPARAM) { StartServer(); return 0; } int OnShutdown(WPARAM, LPARAM) { SetEvent(heServerClose); //tell the listening server to stop return 0; } int QueueAck(ACKDATA *ack) { for (int 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) { for (int i = 0; i < cAcks; i++) { if (acks[i].hProcess == hProcess) { return &acks[i]; } } return nullptr; } int OnProtoAck(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; }