Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
* Copyright (C) 2015 by Andreas Theofilu <andreas@theosys.at>
*
* All rights reserved. No warranty, explicit or implicit, provided.
*
* NOTICE: All information contained herein is, and remains
* the property of Andreas Theofilu and his suppliers, if any.
* The intellectual and technical concepts contained
* herein are proprietary to Andreas Theofilu and its suppliers and
* may be covered by European and Foreign Patents, patents in process,
* and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Andreas Theofilu.
*/
MODULE_NAME='MDB_Comm' (dev dvMDB, dev vdvMDB, char IP[], integer nPort)
DEFINE_CONSTANT
constant char MDB_VERSION[] = '1.0.0';
constant long nID = 1;
constant long nTick[] = { 10000, 10000 };
constant char iperror[17][32] = {
'undefined', // 1 - N/U
'General failure', // 2
'undefined', // 3 - N/U
'Unknown Host', // 4
'undefined', // 5 - N/U
'connection refused', // 6
'connection timed out', // 7
'Unknown connection error', // 8
'Port already closed', // 9
'Binding error', // 10
'Listening error', // 11
'Socket not connected', // 12
'Send to Socket unknown', // 13
'Local port already used', // 14 - Do not try to reconnect!
'UDP Socket already listening', // 15
'too many open sockets', // 16
'Local Port not open' // 17
};
DEFINE_VARIABLE
volatile char sBuffer[32767];
volatile integer nOnline;
define_function connect()
{
if (nOnline)
return;
ip_client_open(dvMDB.PORT, IP, nPort, IP_TCP);
nOnline = 2;
}
DEFINE_START
// Print out driver and version
send_string 0,"'TheoSys MDB v',MDB_VERSION";
send_string 0,"'(C) 2015 by Andreas Theofilu. All rights reserved!'";
create_buffer dvMDB, sBuffer;
timeline_create(nID, nTick, 1, TIMELINE_ABSOLUTE, TIMELINE_REPEAT);
DEFINE_EVENT
data_event[dvMDB]
{
online:
{
nOnline = 1;
}
offline:
{
nOnline = 0;
}
onerror:
{
amx_log(AMX_ERROR, "'MDB <',IP,'> error: ',iperror[DATA.NUMBER]");
if (DATA.NUMBER != 14)
nOnline = 0;
}
string:
{
if (find_string(sBuffer, '#', 0) && find_string(sBuffer, "$0d", 0))
remove_string(sBuffer, "$0d", 0);
if (length_string(sBuffer))
send_string vdvMDB, sBuffer;
}
}
data_event[vdvMDB]
{
command:
{
send_string dvMDB, DATA.TEXT;
clear_buffer DATA.TEXT;
}
}
timeline_event[nID]
{
connect();
}