From 914ebb3bfe4c35dc57d61e59e26e9771bedb8b0c Mon Sep 17 00:00:00 2001 From: sairajzero Date: Thu, 16 May 2019 20:49:08 +0530 Subject: [PATCH] adding server and local reader programs --- websocket_storage/readBinFile.c | 24 ++++ websocket_storage/reader | Bin 0 -> 8528 bytes websocket_storage/tweeter | Bin 0 -> 176512 bytes websocket_storage/websocket_chat.c | 185 +++++++++++++++++++++++++++++ 4 files changed, 209 insertions(+) create mode 100644 websocket_storage/readBinFile.c create mode 100755 websocket_storage/reader create mode 100755 websocket_storage/tweeter create mode 100644 websocket_storage/websocket_chat.c diff --git a/websocket_storage/readBinFile.c b/websocket_storage/readBinFile.c new file mode 100644 index 0000000..3fa0d96 --- /dev/null +++ b/websocket_storage/readBinFile.c @@ -0,0 +1,24 @@ + +#include +#include + +struct tweetData +{ + int id; + char data[5000]; +}; + +int main() +{ + struct tweetData tweet; + FILE *fptr; + fptr = fopen("tweet.bin","rb"); + if(fptr == NULL){ + printf("Error in opening tweet file\n"); + return 1; + } + while(fread(&tweet,sizeof(tweet),1,fptr)) + printf("%d\t:%s\n", tweet.id,tweet.data); + fclose(fptr); + return 0; +} \ No newline at end of file diff --git a/websocket_storage/reader b/websocket_storage/reader new file mode 100755 index 0000000000000000000000000000000000000000..f563955651b47f7c9d41178b11122058ac35457a GIT binary patch literal 8528 zcmeHMeQZ1c#LS!DJJ0~gpaJT^T7*BpbZIRD)4Y(JMnPr$bO~? zn>41Bs#Y4BP3x3DHYwU9)c(h$PK_pYGffL^Crwak8r>&MWlB1_rD}^U;~AoChb-Dnk=+#8F`cKtm~#KHZ}@bPKPznp85X9fi{-I9S^(=kC6Zl2 z59qL9%65-~9lbKr_;lhTaVNExZ(N2bex}r2u{{#*t=qLd5~z-Zqsigw;rhDjx?P?` z%(FxG8~vm1!Nc9MC4ApJv>0;*JcyzEPp9iHwY|Ic*8JvVS7XD(JKs3^+gH$*AE^Gv zB@UYI9NH@ZTa^Rfod@^i!5_+le>o3+C=Y%Sa5p^GvI2lyasCi+w^bSV{qStgfeUy) zefT=+L?|{CjEbS8mJq6%(ENR8)V_f;YRDgsh@p5ms)aX8v1qW% z-y1<6{e!V6`A~J$oQkq1c9u}5&l)?-1$>0yd0P<6NDw#hhfFoMM!$U zb?%lmUXSS_T`+0E&l6tkGV3#cvs}kRz%LW|R50_~J&U*sN(gxhPZ@yu`jr+!R15R6zY(g2mTda%~{@1a$YK5~OfZ)xU#i5q{^B(seYfJsc+wFySTlL2R`Rb~X9`&Xkw59H~ zZ@VMs=9LGI+2gXg_ceFz?|8i1Q=hb_?lq_W?#)#EUKyRSDSQ8rd=KaD6DPeVyeGY< zyz0!vVxu3lo2v?x z?5j%1Foe2JSF5w~Q2B}{i_eQk*YAI1 z=a$U~qdiO~F$H?X2v9-W6Y%^9+Pj9B*XerN-c+{C{whSI+k6w?9_ULD#XrQxB8rJ&;xy+vsmuyuYvh_@MGNX z(BD|&oVFTYJ$%&mBg6Liktway=O-pBY%wU!Jg zDGUXt?FOWxP(($CWO^()fn?}TLG=eDdYoj)G| zZp-n0mqQ0u!T7sqUhy(s54c!R$A84FG)X5>w@nJW$=Pf-#TvV07w6C(R#T?0X-~nVhp4faE#yTrvY%c zL657)0pHAwfffP23Qi46_Rqe!me7)+kf%>9CY4leP=!=gG>ECJKuqnA#CrV^HK4`f z3Dut*7Jae7p-4~*20VM}_SWTA!qiq+^~dA>5j7aq;vNXo!JHP41gzQ#t*&tX8yk!L}oy6$nSwWFm+e$ZVJK z1pwchNRS(ufs`ptYg>?Up%dUFsGa9vsSm@I<(*)4EI4yH~~B` zsKNs)W)N0^VM+d1RlIM&)|1Uy*2DV7!j$hDI;!h(9qE_g!7Yf)vgbuUH@ZP)EWAH5 zRtpuQJ)bL?Zec~DR{Lha@4*?L+voEqQ;whSMSQPdw}+vEcObT(rV3Lx4h|IDma)qA zd|x>R7~U<|p6^{uUj~`6kh?5&3Tk+VVS7IJGUawSe%51p2JG=p#5|vmnbuHC*7!Mq zb5OxCWqUqHGfk5sw{PwLQ)KTWJw9(U<$EI9<9{($`-_0#n9yf0`(5Gh3w)tX#rpnJ zAT`=Ik|U-vhi35LqB_&>S?u|o&y?e37tAxo|9OnT9WojkCXcG=&LE%uxjU}`=7 zTl@ba*>f{|4q=M_ml=!I{wE;B_}Sk2Kjs0WG1RU0zp&WzeT8W;IyV#^H-_GX3ZDJ> ze$MAx{(sY|&pgv#gKfFNp6@@ClxSf+P?3dsrndpbSH|u0J&FH6=KqO#ezG0UAG{}E z7ulZgQxg~z6zlwBd#3M!j?q4Q9;F7j9q9~y*pB&m!nl1t-?_-ps&9E6;$yH!tcD#D zW&14_ob8R2=Z;aep4vZ61Bc%kJkxSKyszQ>=Gcw)lek$xNm!h7ySfz5-ns2p(3Nz7 J6^UBy{|)8U)E)o; literal 0 HcmV?d00001 diff --git a/websocket_storage/tweeter b/websocket_storage/tweeter new file mode 100755 index 0000000000000000000000000000000000000000..d1a61359379104abf3aa88446e3878ba89b16033 GIT binary patch literal 176512 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 gbQs8SadRi%~6 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 T611ECo2@FnehyyCXQux@G&l&C literal 0 HcmV?d00001 diff --git a/websocket_storage/websocket_chat.c b/websocket_storage/websocket_chat.c new file mode 100644 index 0000000..5d58a10 --- /dev/null +++ b/websocket_storage/websocket_chat.c @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2014 Cesanta Software Limited + * All rights reserved + */ + +#include "mongoose.h" + +static sig_atomic_t s_signal_received = 0; +static const char *s_http_port = "3232"; +static struct mg_serve_http_opts s_http_server_opts; +static char serverpass[100]; +static struct mg_connection *selfClient = NULL; + +struct tweetData +{ + int id; + char data[5000]; +}; + +static void signal_handler(int sig_num) { + signal(sig_num, signal_handler); // Reinstantiate signal handler + s_signal_received = sig_num; +} + +static int is_websocket(const struct mg_connection *nc) { + return nc->flags & MG_F_IS_WEBSOCKET; +} + +static void broadcast(struct mg_connection *nc, const struct mg_str msg) { + struct mg_connection *c; + char buf[5000]; + + snprintf(buf, sizeof(buf), "%.*s", (int) msg.len, msg.p); + printf("%s\n", buf); /* Local echo. */ + for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) { + if (c == nc) continue; /* Don't send to the sender. */ + mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + } +} + +static void unicast(struct mg_connection *nc,const struct mg_str msg) { + char buf[5000]; + + snprintf(buf, sizeof(buf), "%.*s", (int) msg.len, msg.p); + printf("%s\n", buf); /* Local echo. */ + if(nc != NULL) + mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + else + printf("No selfClient is connected!\n"); + +} + +static void storeTweet(struct mg_connection *nc,const struct mg_str msg){ + struct tweetData tweet; + snprintf(tweet.data, sizeof(tweet.data), "%.*s", (int) msg.len, msg.p); + FILE *fptr; + fptr = fopen("tweet.bin","ab"); + if(fptr == NULL){ + printf("Error in opening tweet file"); + return; + } + fseek(fptr,0,SEEK_END); + long int filesize = ftell(fptr); + tweet.id = filesize/sizeof(tweet) + 1; + fwrite(&tweet,sizeof(tweet),1,fptr); + fclose(fptr); + //broadcast + struct mg_connection *c; + char buf[5050]; + snprintf(buf, sizeof(buf), "{\"id\":%d,\"data\":%s}", tweet.id, tweet.data); + printf("%s\n", buf); /* Local echo. */ + for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) { + if (c == nc) continue; /* Don't send to the sender. */ + mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + } +} + +static void sendTweets(struct mg_connection *nc, const struct mg_str d){ + int i, n = 0; + for(i=1; i < d.len; i++) + n = (n*10) + (d.p[i] - '0'); + //printf("%d\n",n); + struct tweetData tweet; + char buf[5050]; + FILE *fptr; + fptr = fopen("tweet.bin","rb"); + if(fptr == NULL){ + printf("Error in opening tweet file\n"); + return; + } + fseek(fptr, n*sizeof(tweet), SEEK_SET); + while(fread(&tweet,sizeof(tweet),1,fptr)){ + snprintf(buf, sizeof(buf), "{\"id\":%d,\"data\":%s}", tweet.id, tweet.data); + printf("%s\n", buf); + mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, buf, strlen(buf)); + } + fclose(fptr); +} + +static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { + switch (ev) { + case MG_EV_WEBSOCKET_HANDSHAKE_DONE: { + /* New websocket connection. Tell everybody. */ + //broadcast(nc, mg_mk_str("++ joined")); + break; + } + case MG_EV_WEBSOCKET_FRAME: { + struct websocket_message *wm = (struct websocket_message *) ev_data; + /* New websocket message. Tell everybody. */ + struct mg_str d = {(char *) wm->data, wm->size}; + if (d.p[0] == '$'){ + char pass[100]; + snprintf(pass, sizeof(pass), "%.*s",(int)d.len-1, &d.p[1]); + if(!strcmp(pass,serverpass)){ + if(selfClient!=NULL) + unicast(selfClient,mg_mk_str("$Another login is encountered! Please close/refresh this window")); + selfClient = nc; + unicast(selfClient,mg_mk_str("$Access Granted!")); + broadcast(nc, mg_mk_str("#+")); + }else + unicast(nc,mg_mk_str("$Access Denied!")); + } + else if(d.p[0] == '#'){ + if(selfClient == NULL) + unicast(nc,mg_mk_str("#-")); + else + unicast(nc,mg_mk_str("#+")); + } + else if(d.p[0] == '>'){ + sendTweets(nc, d); + } + else if(selfClient == nc){ + storeTweet(nc, d); + } + break; + } + case MG_EV_HTTP_REQUEST: { + mg_serve_http(nc, (struct http_message *) ev_data, s_http_server_opts); + break; + } + case MG_EV_CLOSE: { + /* Disconnect. Tell everybody. */ + if (is_websocket(nc)) { + if(nc == selfClient){ + selfClient = NULL; + broadcast(nc, mg_mk_str("#-")); + } + } + break; + } + } +} + +int main(int argc, char** argv) { + + if(argc<=1){ + printf("Enter server password : "); + scanf("%s",serverpass); + } + else + strcpy(serverpass,argv[1]); + + struct mg_mgr mgr; + struct mg_connection *nc; + + signal(SIGTERM, signal_handler); + signal(SIGINT, signal_handler); + setvbuf(stdout, NULL, _IOLBF, 0); + setvbuf(stderr, NULL, _IOLBF, 0); + + mg_mgr_init(&mgr, NULL); + + nc = mg_bind(&mgr, s_http_port, ev_handler); + mg_set_protocol_http_websocket(nc); + s_http_server_opts.document_root = "."; // Serve current directory + s_http_server_opts.enable_directory_listing = "no"; + + printf("Started on port %s\n", s_http_port); + while (s_signal_received == 0) { + mg_mgr_poll(&mgr, 200); + } + mg_mgr_free(&mgr); + + return 0; +}