Commit 4f743bd8f1a88889f9fb02f2fcde895fde78d55b
1 parent
1a71f2a1
Server Raspberry, sans la liaison série
Showing
1 changed file
with
121 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,121 @@ | @@ -0,0 +1,121 @@ | ||
1 | +#include <stdio.h> | ||
2 | +#include <stdlib.h> | ||
3 | +#include <libwebsockets.h> | ||
4 | +#include <unistd.h> | ||
5 | +#include <termios.h> | ||
6 | +#define MAX_FRAME_SIZE 1024 | ||
7 | +#define WAIT_DELAY 50 | ||
8 | +#define TAILLE_MAX_BUFFER 50 | ||
9 | +#define TAILLE_MOT 8 | ||
10 | + | ||
11 | +static int callback_http(struct libwebsocket_context * this, | ||
12 | + struct libwebsocket *wsi, | ||
13 | + enum libwebsocket_callback_reasons reason, void *user, | ||
14 | + void *in, size_t len) | ||
15 | +{ | ||
16 | + return 0; | ||
17 | +} | ||
18 | + | ||
19 | +static int callback_dumb_increment(struct libwebsocket_context * this, | ||
20 | + struct libwebsocket *wsi, | ||
21 | + enum libwebsocket_callback_reasons reason, | ||
22 | + void *user, char *in, size_t len) | ||
23 | +{ | ||
24 | + | ||
25 | + switch (reason) { | ||
26 | + case LWS_CALLBACK_ESTABLISHED: // just log message that someone is connecting | ||
27 | + printf("connection established\n"); | ||
28 | + break; | ||
29 | + case LWS_CALLBACK_RECEIVE: { | ||
30 | + // Création du buffer pour contenir notre réponse | ||
31 | + | ||
32 | + char* out[4]; | ||
33 | + out[1] = strtok((char*)in,","); | ||
34 | + out[2] = strtok(NULL,","); | ||
35 | + out[3] = strtok(NULL,","); | ||
36 | + out[4] = strtok(NULL,","); | ||
37 | + | ||
38 | + | ||
39 | + char commande[50]; | ||
40 | + sprintf(commande, "python get_data.py %s %s %s %s", out[1],out[2],out[3],out[4]); | ||
41 | + | ||
42 | + | ||
43 | + FILE *file = popen(commande,"r"); | ||
44 | + | ||
45 | + char a[TAILLE_MAX_BUFFER], b[TAILLE_MAX_BUFFER], c[TAILLE_MAX_BUFFER]; | ||
46 | + char heure[TAILLE_MOT],minute[TAILLE_MOT],temperature[TAILLE_MOT]; | ||
47 | + fscanf(file,"%s",a); | ||
48 | + fscanf(file,"%s",b); | ||
49 | + fscanf(file,"%s",c); | ||
50 | + pclose(file); | ||
51 | + | ||
52 | + int i; | ||
53 | + | ||
54 | + for(i=0;i<8;i++){ | ||
55 | + heure[i]=a[i+2]; | ||
56 | + minute[i]=b[i+1]; | ||
57 | + temperature[i]=c[i+1]; | ||
58 | + } | ||
59 | + | ||
60 | + heure[8]='\0'; | ||
61 | + minute[8]='\0'; | ||
62 | + temperature[8]='\0'; | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + printf("%s\n",heure); | ||
67 | + printf("%s\n",minute); | ||
68 | + printf("%s\n",temperature); | ||
69 | + | ||
70 | + // release memory back into the wild | ||
71 | + | ||
72 | + break; | ||
73 | + } | ||
74 | + default: | ||
75 | + break; | ||
76 | + } | ||
77 | + | ||
78 | + | ||
79 | + return 0; | ||
80 | +} | ||
81 | + | ||
82 | +static struct libwebsocket_protocols protocols[] = { | ||
83 | + /* first protocol must always be HTTP handler */ | ||
84 | + { | ||
85 | + "http-only", // name | ||
86 | + callback_http, // callback | ||
87 | + 0 // per_session_data_size | ||
88 | + }, | ||
89 | + { | ||
90 | + "dumb-increment-protocol", // protocol name - very important! | ||
91 | + callback_dumb_increment, // callback | ||
92 | + 0 // we don't use any per session data | ||
93 | + | ||
94 | + }, | ||
95 | + { | ||
96 | + NULL, NULL, 0 /* End of list */ | ||
97 | + } | ||
98 | +}; | ||
99 | + | ||
100 | + | ||
101 | + | ||
102 | +int main(void) { | ||
103 | +int port=9000; | ||
104 | +struct lws_context_creation_info info; | ||
105 | +memset(&info,0,sizeof info); | ||
106 | +info.port=port; | ||
107 | +info.protocols=protocols; | ||
108 | +info.gid=-1; | ||
109 | +info.uid=-1; | ||
110 | +struct libwebsocket_context *context=libwebsocket_create_context(&info); | ||
111 | +if(context==NULL){ | ||
112 | + fprintf(stderr, "libwebsocket init failed\n"); | ||
113 | + return -1; | ||
114 | + } | ||
115 | +printf("starting server...\n"); | ||
116 | +while(1){ | ||
117 | + libwebsocket_service(context,WAIT_DELAY); | ||
118 | + } | ||
119 | +libwebsocket_context_destroy(context); | ||
120 | +return 0; | ||
121 | +} |