aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/LuaSL/src/LuaSL_utilities.c
blob: e25b46cb19f1a5456210f3ef2a6a31c5fc088acc (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "LuaSL.h"


// "01:03:52 01-01-1973\n\0"
#    define DATE_TIME_LEN	21


char    dateTime[DATE_TIME_LEN];


static
void _ggg_log_print_cb(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args)
{
    FILE *f = data;
    char dt[DATE_TIME_LEN + 1];
    char fileTab[256], funcTab[256];

    getDateTime(NULL, dt, NULL);
    dt[19] = '\0';
    if (12 > strlen(file))
	snprintf(fileTab, sizeof(fileTab), "%s\t\t", file);
    else
	snprintf(fileTab, sizeof(fileTab), "%s\t", file);
    snprintf(funcTab, sizeof(funcTab), "\t%s", fnc);
    fprintf(f, "%s ", dt);
    if (f == stderr)
	eina_log_print_cb_stderr(d, level, fileTab, funcTab, line, fmt, data, args);
    else if (f == stdout)
	eina_log_print_cb_stdout(d, level, fileTab, funcTab, line, fmt, data, args);
    fflush(f);
}

void loggingStartup(gameGlobals *game)
{
    game->logDom = eina_log_domain_register("LuaSL", NULL);
    if (game->logDom < 0)
    {
	EINA_LOG_CRIT("could not register log domain 'LuaSL'");
    }
    // TODO - should unregister this later.
    eina_log_level_set(EINA_LOG_LEVEL_DBG);
    eina_log_domain_level_set("LuaSL", EINA_LOG_LEVEL_DBG);
    eina_log_print_cb_set(_ggg_log_print_cb, stderr);

    // Shut up the excess debugging shit from EFL.
    eina_log_domain_level_set("eo", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("eldbus", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("eet", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore_audio", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore_con", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore_input_evas", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore_input_evas", EINA_LOG_LEVEL_WARN);
    eina_log_domain_level_set("ecore_system_upower", EINA_LOG_LEVEL_WARN);
}

char *getDateTime(struct tm **nowOut, char *dateOut, time_t *timeOut)
{
    struct tm *newTime;
    time_t  szClock;
    char *date = dateTime;

    // Get time in seconds
    time(&szClock);
    // Convert time to struct tm form
    newTime = localtime(&szClock);

    if (nowOut)
	*nowOut = newTime;
    if (dateOut)
	date = dateOut;
    if (timeOut)
	*timeOut = szClock;

    // format
    strftime(date, DATE_TIME_LEN, "%d/%m/%Y %H:%M:%S\r", newTime);
    return (dateTime);
}

void sendBack(gameGlobals *game, Ecore_Con_Client *client, const char *SID, const char *message, ...)
{
    va_list args;
    char buf[PATH_MAX];
    int length = strlen(SID);

    strncpy(buf, SID, length);
    buf[length++] = '.';
    va_start(args, message);
    length += vsprintf(&buf[length], message, args);
    va_end(args);
    buf[length++] = '\n';
    buf[length++] = '\0';
    ecore_con_client_send(client, buf, strlen(buf));
    ecore_con_client_flush(client);
}

void sendForth(gameGlobals *game, const char *SID, const char *message, ...)
{
    va_list args;
    char buf[PATH_MAX];
    int length = strlen(SID);

    strncpy(buf, SID, length);
    buf[length++] = '.';
    va_start(args, message);
    length += vsprintf(&buf[length], message, args);
    va_end(args);
    buf[length++] = '\n';
    buf[length++] = '\0';
    ecore_con_server_send(game->server, buf, strlen(buf));
    ecore_con_server_flush(game->server);
}

float timeDiff(struct timeval *now, struct timeval *then)
{
    if (0 == gettimeofday(now, 0))
    {
	struct timeval thisTime = { 0, 0 };
	double  result = 0.0;

	thisTime.tv_sec = now->tv_sec;
	thisTime.tv_usec = now->tv_usec;
	if (thisTime.tv_usec < then->tv_usec)
	{
	    thisTime.tv_sec--;
	    thisTime.tv_usec += 1000000;
	}
	thisTime.tv_usec -= then->tv_usec;
	thisTime.tv_sec -= then->tv_sec;
	result = ((double) thisTime.tv_usec) / ((double) 1000000.0);
	result += thisTime.tv_sec;
	return result;
    }
    else
	return 0.0;
}