thermferm/server.c

changeset 264
91c358556ecf
parent 261
e4341cfbc2a8
child 266
07819a7ad3c1
--- a/thermferm/server.c	Sat Aug 23 23:43:11 2014 +0200
+++ b/thermferm/server.c	Sun Aug 24 14:41:31 2014 +0200
@@ -585,7 +585,8 @@
  */
 int cmd_list(char *buf)
 {
-    char		*opt, *param, *filename, *p, q[2], buffer[256];
+    char		*opt, *param, *filename, q[2], buffer[256], *copy = NULL;
+    char		*mode_o = NULL, *mode_n, *target_o = NULL, *target_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n;
     units_list		*unit;
     FILE		*fp;
 
@@ -629,14 +630,40 @@
 	if ((fp = fopen(filename, "r"))) {
 	    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
 		buffer[strlen(buffer) -1] = '\0';
-		p = buffer + 17;
-		if (strncmp(p, (char *)"Mode", 4)) {
+		copy = xstrcpy(buffer);
+		mode_n = strtok(buffer, ",\0");
+		mode_n = strtok(NULL, ",\0");
+		target_n = strtok(NULL, ",\0");	/* skip air_temp	*/
+		target_n = strtok(NULL, ",\0");	/* skip beer temp	*/
+		target_n = strtok(NULL, ",\0");
+		heater_n = strtok(NULL, ",\0");
+		cooler_n = strtok(NULL, ",\0");
+
+		if (strncmp(mode_n, (char *)"Mode", 4)) {
 		    if ((q[0] != buffer[11]) || (q[1] != buffer[12])) {
 			q[0] = buffer[11];
 			q[1] = buffer[12];
-		    	srv_send(buffer);
+		    	srv_send(copy);
+		    } else if ((mode_o && strcmp(mode_o, mode_n)) || (target_o && strcmp(target_o, target_n)) ||
+			       (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) {
+			srv_send(copy);
 		    }
 		}
+
+		free(copy);
+		copy = NULL;
+		if (mode_o)
+		    free(mode_o);
+		mode_o = xstrcpy(mode_n);
+		if (target_o)
+		    free(target_o);
+		target_o = xstrcpy(target_n);
+		if (heater_o)
+		    free(heater_o);
+		heater_o = xstrcpy(heater_n);
+		if (cooler_o)
+		    free(cooler_o);
+		cooler_o = xstrcpy(cooler_n);
 	    }
 	}
 	free(filename);

mercurial