From d00228867a94cf0b1d7cacc5b0cf906ab648ec88 Mon Sep 17 00:00:00 2001 From: kicap1992 Date: Thu, 30 May 2024 11:49:43 +0800 Subject: [PATCH] added mysql database for storing data every second --- ._.DS_Store | Bin 0 -> 4096 bytes bun.lockb | Bin 0 -> 57275 bytes conn.js | 22 ++++ index.js | 191 ++++++++++++++++++++++++++++++++--- package-lock.json | 252 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- socket.js | 29 ++++++ 7 files changed, 485 insertions(+), 14 deletions(-) create mode 100755 ._.DS_Store create mode 100755 bun.lockb create mode 100755 conn.js create mode 100755 socket.js diff --git a/._.DS_Store b/._.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..cda2de75ab80cc7a28b13a280530b2b518e30184 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIhYCu0iY;W;207T zG>LhB3PcA(1y)6)f}Oyr5 QX$sZBh0LmC1ZU6uP literal 0 HcmV?d00001 diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..e61dc75bcbf9a949bfc0d79b1964453a7d1a7fbc GIT binary patch literal 57275 zcmeEv2{e`4`~M+Iic(4`N+rTE&t<60g$N}X4i1jt;G9DgQV1oKG9(Q`r9wrdfshiK zkOo7kP$(K{(Er)TdF#Em8@k`S)^DxodOLZzP&~;*7jK#ui9z(2Q<%Zzv;h{Vfk=mCq!z4hUpVvJ-uB{>i!dtlQ)ft^e52*5%c&l1OgAV zck=f3ppXd!M-rW^tVnStIXRJi7<7Un2Z6v1^%AVyi{eElIy(~lfqw#=7vm%lCPMDP zD%(Mh`2MaJ)!Uiu$}-ZX`O<#gpW^ z3d+-=OecH!lW7D(7?>1|FOcNvNue_cx=@ewSc36FNIhaBmB19HSC3H8Wsf7i>& z4aV(EqPft?{$whHP9u|?ohdY*O+bqJ`3fWmPoWcCJ-r@J87v$JMnLTvAV+vH_y_TksDa>5PHtX-bYD*x_h;7mUdR#t3FJusUib$NL)%#S zP00D7Oreu#G*TdeLUkk4C=7ZToJaO=fW|0CwnX}fOc~;Hp%cjg3>v8z%BbF*?oCCG zoy)3EhaAn zh#wor1XlYaFnOq7I)lXUqm${;P)6f&Ci^%eT}RuF9N^ zd<$4*OkZsMAiu@;hxP9QtjG_^3=&#ygl98`_#Z)z=F6E(XVAO@34iw+9}@X z_AwF~(xU)!G`?eyBfEkhdvBl;2u8v~We3QSUDrU4_zyxmlqa(C);R>iR47}_B@jS` z&{`;?d2#g~vX?fT2h)ZM!Z?}!B{GDsVdWFyJnG+z%y9E|rV~B`3G#>6kRvdtu@QwF3tQTW|cmUO@0-!+6~=w#knlIoDUk zM43n5%Mo5{#GO!=@l0-Y52s;OV6NNcQ}60a$LVwo6z!pLdbD?H$M?&yB_!EZlirnI z&FK4DnMvIxvu@|Y0u8nC-b*T9n(ez#JYLUasbBGhF3r+|Vj<_d|K9IRo2j>g3%O4d zR%o?O&$w7|u)j9svV()fdF~KhiE2`#%FUNyZxSVXbjzKbYQ^5t5}MqKdDcFms(U!sE?ronoUU-sqWvk=2X! z7AI}WG@aTKTvF$xHid8BOMw}!^{(e44;SfrM`Z;%6dM_6I$N#qK{^(`U5ph(?vVzS7>pR!?3jp3;-vi}9rfNpU_e|M*0?wp0CRPUqLLogy{H+!Ie@ z`eN(HW&XCto=IESvHr0BKbKC4yz1bccENR~Q#IRpi7Ks!HJ77O^Yf3jZJeZ%^DdUU z>t;pZQ>DNA4Q+Bs;hTZ=@tA#hruVPwjd>ib8@O!Wg)6!|-MJcv`3o$?4YYQQk2ZRI zJ2mBops!cagmL?K)yxlTPZyf~b@Q(5jw(@OkwX<)O;fe(-uQo7e(+>(VN`qy*K^f$ z-sJOsJ1=O@IJhZg=P?WUuUckRMQ%wc4YNy|R_9k_cvTz;(Q3JG)^XzbYU-I3{!Q=h zsck;tvvz{N>*j{mLCI%#_~LVv?R!if`hTMOT$XURky&@Cj$=WrbyrG&I59Q#qGX|F z;AwSi-OqA(yDQvg`l{yTOPiX_J{_03(a?SB_Eg;f#q}Yfg`!)lay5&cEtbq3;F(u2 zP5V&qvFl0|#>MSk;ig>FC1EM+Hl1F-d-JA-S8NdD{+9&XA!ZVUf7KyQazH)~1h!41 zN*F!_S{tzN=p5o1O~UYP&{&>@hb`Z4{41U%~d-{AKG z$cWWHvfb~FzZLLAz{BAK1n+edl+_zYFlle~|6an2?Mn zVeQ(W@&D!cAAlmVpg+ib{7G!3V5tM90p&9wSNbAWxyld;qd#NDZcGL9bLRV>AiF zZv?ysOMj%p{Lz4+4TdiSyb4Qyu;Zu`hJOWkHNeB(8SR6Ad;ALEa7zJ?{0_zP-}OHR z0I>N({tJ8ZQ6)_OlYn0g{UZk;>Ymk z0FV4{wCfhr4a2_zyanK~GFCrQjX*GwCfPF^Kup* z;r>nk;ef~DC+34A*&fwn{a*$=n*Y)2jd5dmcDU%`*WYM)F#IyWBmYHZW;WEybwGjL-7N}ZlpVQ9<>=RVeM=HkK!lRH+FtFEULrW zr2rn;55-@Ue%F3a0gvp5U3-2PFAEPPk^f=+4{0&-znK2+fXCJ!>Kn7eNDLT09q zOMig>HvS&qvHKTOc`bXEk(PEK) z7+w?bT7XCMj?Tg5Y*Y!u2LpZ?;D4uY)B%Ps0sKn9qcV1GGzwsCCHa5c{~{Zp7&e-O z;k^Kl<{x1&ANU>o3BXGM9`%i`0i)%>`fp_QkIJLPBK^eBw{%ZlR&C-7)489)gpJ)1y>j$O-zTK~mG5iV^9_fzm zT~I!ngyC}muZ`3Hck!Sv7`^}v3!+vNCzdL{btNm=De-#)%T7M7K_4k$10Y@9VQCkczBlyFA(7E5$-y87A zeh7=^;CJz-0FUB7*7tAwKj5+Thpr)`P1yLy&-$VNXtAgrhSvu?>K`kQmIG_Q0r2vG zM>rI}u=A)qT*BHNXZ4Tl{%_*%1J?MldHY@a3(Ow6f5GsWUc>2*>accZfLDg`BRqC) zBrF~u33y~bghlf|+I=wA*LlEW{x_O_u{Id~IpDGD53=3w+D{0+&mn^TNcYk19gz-L z|5kw4X4wy&AMF~z@a2HlW#Qpg{I}OHm++7ME8;{kU^EHq-vjW9&_7nj@{u^Ob_a3& z|Beq~_$PqZ#M$q6=Wh;tN2UHh;H`1^(e{mOgXy1u!=v-Rd;j$Y@Fpz%5huorxQ0tu zJI}cU!dl$;vGc=WQ61K<0`Tbm1&bde;jnrPKUw5Q{6}@8<-zdUfM3PxA7Ovjf8zna z1n?N&@7liw@RJ-;8-fcr*QfH%P5e>eW#W%ZBx9xWEN z#rhw+;K%sU`O)43VR${jqxFwrInco<5{BOccrDiW;a2>+UL#Rp_-4Rk`{#eN|CuH_ z^!^|9hjgDYQpc=%tbcdFYlHr%{BQg>8}MlVG3H<5n*hIzWk1yaX#Eh=Uw9#bpal5I zfJNiy1Q~5Y{)Pmtd35bZoai0|>45l9!sn zh}W7`9!-wcz{vBCme9j5yTv_!LRy{sPdbqRBqa5|)1%l2~K~Tcy zh>y-ZJA97X1+dx;mm^@HWz zCOzPpR4%!<&bK1rB90fuTr6>Xak(zxzGQo(reZ`?I17p{F*n2@7>g}&rV_eSl32Pr|v^{>wDn|GG;<-ERoGtF*p*?eKv=Q73n zc99e9cj0)^H3mx@d6Y@lo;%4u2<^Q3;Z>+AKc9}&sub7oBDQgs#kwf{&?B+ zPE~rM*77<@(NoF!F?UM#`RP<#x}dZ~FY*zN7p)B}alD&+T42H>!AW;c@4j?Ssrk)K zemVz3&NX7WWrcY7G^^gRV)JF+__%N-8W0P-t8^XetntJ-h0t&bV&jhI9_yp z!xBfSg8oe316Lg8Yk%HwR4jSyLo1`)^-?AlHdYo(N#0tlYu9;ZknB7-+Wn6Gxy|`(U{`K2Qhm-^dg0w8V+MVvW z%~_xs_OeSpWPazWfCC2}-0rkB;p*$WK3OW~=@qF0QU`zIE5aEZFBe7%`F}ZY+L!a1p_kk5NRm}I@i z?*Q*x)u0f^({tw0DqrP@b&_tsFYT%PcIze14rrf;B@T`|scQ?H?>wJGDRQ>eb-Al0 zUHnd`N;NS3-MX($$I5%%+0GeWmpLD78dW>yY%=><$1FZV_%S_!Rk<6YT;Dck<9Mq!~o&uBPO*73`2bH&6&AM=6X7~krFovBTO5#2VI7r?3*5S?OG zExM?w$#SyLnj&8lQrzS9<~UyX?B;vopok`{U;l6sMP_!7arI}-fIiB_6O#_8sCBH3 zdTR6WpiF1^iKVml+VAUlByy*TMOB{P#3)^DD zg|%o+Cp_N^&vd+1nfq#Icj-QPbIvioe)>-52dOve4#@?J#df51s_eQu$>-LDzB2=+Cslb?us{2<&u~}q7fnUN zZp!nD`fySC+u}2psiOBqv~SKD zi{qV!=XF-r^c*-}t9W%_`?8aq8v9T2hlVC=XiP59Fea0{+iqQ6`C#@ItAx9}m!Amb z%nzHtY{{EEAHQ3(5@pgvYL6!E!12Q82Hz7$-h0*acFm49J!|*-l=GF}{+u4M+Hq?B z8@7BkL(k=0b6m`J+}v6`dGXlE+HG-SrBR-y1$;_m^{oY~h(}ik%(#r>75L5yc2F{w zTyVzq%ycV;>AR1GLR{0|*sKi*H&CqHCqoOJ><}2_?<;@wt+u*|YI|x^zknZa>$%(( znFmiIGT8(4i!|}qp&5AIg{xu~cN}Icy&_?k^PC!0#UCElJWPC{ zDwV8!C@y#YbSIa}%>+fiYn_>-LzTBK^fkWItL>uKU(?#^tUjfiEw|wL8VdXI*{g88 zf_PqA?^2J_NsgC~7+PvK%9Kyuwx+HxM*Q@&jm!03Q}6UutGzg;W1^#7{k2@b{@t6$>Yo*p)c594F0Tz_`Vxo%d15SUCifp zNu4Zymh6{0?H1#Puc~rz>o;?i04_hjD4cz<=YEKsW9{sq)zYh_>vrqimFTZk87vDs z<+EeX>@lC5bH-Tt<1%^5bvl^GXh$tyMX;CSbL z*A}e{%JGZ&+2%!(1Q~tqZk^%c|gD|@OU_BOkr;4iI$`V1c}B& zW_iW>5{3uNcq3Y662pufal9gU-UAyheTj-6oP9ka_BccB(b%TXyb5&^=M-;$dwcO+ zR(nFkZoAV(?v-hQ->m9umEL->eF*+$;k9w5RIRDIuWI@o9Pd0l?=mH)D-G8RcP^2Q z3Oy#;e|Xu+Eym%;*v_7Hda;`-xOCgo)OMY<`qQ6?T~$)=FDkcAIVD^jIgrTS6)z-c zuQTxoj(0wuH!t13u|rr}u-~9cW|_}&#l`kdlwMd(({pdkx!da3cYecd>qk>5MHlZj z4p<)e`p{`_Nn|lwaxL}MQs1w=^a>{&?*crpheNQ_vP`AG;0vF-ZB9&`_u6}gk-bDu zo~~VHeQ+b+39Y-FTs59o4t=|x{;bJtZ2P;tDN?~@i)SCLW8B|kb-D}3D~jix5+tzg zywCb7jnEV4zYh4eSATO4*~G3x+2i$OWzI#L(`FM}Gy0!ziOX5}`ckmE_L2v*E0u); zw=*K+o)2(!{$-!K5YM|XHciZgJw^Q0&7kpy#204Ivo`d-3x4-}m*3+n$(J{tvfy@) zFBK07xG+O4G|#EkZwF~zWRxGra`tQ66T)4(@%}4@=WQLQ7k!U*BH>EiO#vyL^Ck(q zb$EJr`iP1+i4=Qf=vIGwYH{?zi}*WD`FtGsM^x4cb8h$DV$-#5 z8{WQ>c;2rPub(`Uts1j5Buek7mfMSMA7^RYJ*EAUBgDg`Q&0cg;d55^CH#ELUCQ_? z$U6@$=JS1Mdr&rSgB!!<(e5c(`288|yT2!nmhc0sdZx4oGcWavB|XX4rUVlX&SDe_#pLXv*l-AHv5Sg`jE{&=)56(-_?;Ev&b%&V z%gC|HCUqaRk7w-LKTqd;`j&dvd6Oj{XOiE}k-eiM&|p6G($y2M882U#t$Xc%ElR=p zYV4K1wY23oy;XEPalF!a-v97ERtC@eA6|!K@w`12@0$mXq~AR*D6!1uu8#JElau>2 zr^tvUx)7&go`-)h1RB|^*^;) z8JF^@#aOwKTzhE0LZU$Ha(L)~J=ehA^B{7L@MrmNAByz}P> zdjc4>u_R>+k%*h^OZbAyc-C_q6WZ7JnX6>%?)(7lwY!8Zo81}+Uv7)44GIn@L zO3Sc2#m}`m&d-m(pI5|4A?J9}?)mJ3%DUU>d49*=6Su9F5z02w+YxHHLZj0CSon+X zSKcOm_jS$|_{pvk-rBh}b(x;BrvJBO&FPL&W%}b}rEvP9=e=0sxcb7}L*!a(mc!I@ zR@>HI$n@$DzgL@7exzjg-hIoKw@tR4w29QG^6bM0!MwAYDSojoe9l{v`oi;%=5lyE zd0}pZ<3;bou*6|_CYA7jr^~ouM^uH&pa$`|p?rw^tO>Jf_luu2lAj`ZDzCXiG}2~q z$k`CS=of5bGTIHMYxf+;G1Q-#n-tJ}7{`m=uVIP9`3fJYOFd&r+Knga{?{(3U+F72 zv)Fpgo+&Yp_4^l}YL+u!l&oy?K*#jP{p&MLl+L`S8U(*s5x9m!p{0Fay`DXeR}~|L zoMU`v$g7yZx$sP2v*(2Su3qK)KfXJmFkemQon*XcKSjnGf1QVKLB1yr@9M1nOJ+5- z_jsgUZ=)WXuR#k|zEYSqb?+5!_RkBCEwmQkRljwrc<5ILWMC2UDUTO$*tTcBxN387UEb!i+?z^(TEcKaL=Bv59Pfpxi_BmOX z{Pq5Qqn=nlo;Z(SWtHs`yTmoNUq0ei5dA=BZzhfxy~o57M_0n<9hylUB9aX?v$wvJ z^ExBjW2h3^eV!5N<+{E6QrpXIg@#&fZC`>m7S798)Em6-a3<|>%tDdulY}yZ2TM-l zcr`Fm$T^;_N)Itm-&FBtuY_%Zx*c(~#HG19YZQC(H&y6p_BXzCbuHy7F;;wBvEnI% zdx@IS`zyK12X>NOEXG<@+Q#@E!12PjUf&akc!k|Gqj%$WgiLz6Ww+vnMcZ=^-|)B1 zIJ@|Og^zI7mN7z2Sxr-4B$`S#tjYU!^O}z5gN7GJXPS38M==C0slV69@oIf%1${Xy zFK;zYUgv)Nf&Qn21l=hwd!4=#H|Q@4%#-$6xAt4WlU(iw!ETF(&p5dP>Kp5$Lsass zCbWGju=3CO5+O|9j^owF^QMO?L=HArY&rkwaa+RrZ@SIiiA2rT>t|i~&KjQT7vR_= zQkbdXuyxUVgQV-vW%@Sp&3e;2*FUB)rry-?1G$C`$Ga5IJF|I@^OWVg0@rrCR9*ed z@pj;~gf7Qwv%84z2VEGb5U>3ZYlnR z<6Va5X9Q{3y5)W&%1wSdBZ_*uhmO-%2hV%(-Qfeh zZJlP1yw<$lUaYw;s!d?=;Mwv?vOeo;*Te-IEnjd^oTwpEXdU20SVomuv|vKZWPR88 zptvf9Z>fs*WjJ14Ja5a6J?eWz&T&6dJGDuyB&Xup3lZh%Zcd-SaJlJk4*mSq?n9Mi z?F+pfAJ^3A$zQri^<27fUGSN#Yf~lWMe|#~cgOMS;dw2JL`0lcb}qYpGxlwn>)hK9 z64r=rcU*iu;Fih_b;gy+bt#5j3OQeb$2N%zsvmTSo@^_1b4$rLNrwUXOpjaIL>#X^ zo;TrhB_%}5(W=m9NeuV9+iL#8@ZetcgzGT@YOUOhn|o%~Ojsa(-THoR`2HEY6`CrI zwsHpCSR*;T$S*QQg!{l19IpYMmrU^9v8pNKz*yd_qp=+`?+1J=U4A|@{_fk`R#bh- zOHIys`y{Vumy?eteORNr`{25AiVKJQAh%4|%*$SpLzo@uOglwN8~@Zqmox zxY}MEuMwV?Z{S>E_llQ&601I|#!uYh)TH;VtTHoy?*ZQxuDp?3n)GWIki)#Yl~*a7 z)rtCSjhWL{t{zgm$ZyPy-35lx`yq>?sT4cSDkXerOIbxF1!#7>`#(s>oYrDebP!>OHCXRO{MhZDc z#B~)H*W)XKwYvEuj?d~m;&W4O!i9P2rx&M`@wT2-Xt=lY(#LhYZ=>o5mwie-Upu(P zoxa#O`g{Q`fmG!3Nl6XIYmDdJnyRnFB{KIx)8M$zgnzST=a$>X1&nc#V!-xu?9IuRY7^}Oo7 zTLQ`5ymsP|Y=Mbk<34rOn_B0&&J%nScecX+>XxmP>VvJC+Z(oq-Li-04+ot#h_xh0 z*y8jx#q;W(2^>_5@TptoqZD|gF=79dsxO-qtZgT~_HXK6)1M~OwNNXWA{{kLJXS{6 zjWc2}$?`-}pnA)k8z(m(4NnuegyUU>=lzu1(`_hIuYLca-8R3R9nzxj+u#wRZNBxX z&fsSYOZ%)npNhXz>LQ*!GA(O=qVA1#Vg~NpeF*Khc~4HyC(p;x_$qh|AHNPBo5|sr~8hoOR_QgoOv>GtTzt$}~LQk~6c!C|3RP>{;qs z{bRTj_4luTmWR{V9Ivm5j#2I-ep9}2z1QrE7R2?eJu4=4NAdd8`)O%M96g#&W_7fV zx4g69O!qDAMbG))7bVE7`ZQNFC3mTym%1&1_6Enh8qe#Wo4wIO!+q%spBJ0A=$e^M zGf>wa-^j5+d%~k9v!?Bo5x3gnG|{=KtHeh%de1(?dVyWNvS$x@CtUWRoep+6u7TsV z!1JD%c72NQA}-f!bH(2$v#)yeHOVq%K9^$ClyRMg6W4$JFz=F{uZiJe8UJ#QJ;#(! zE3DtS>G1ONylIPfKMa3%vI)Omx5V>qH%g0lAXI&8931mxy+>>4#8W(}%c&))@eSi| zx00TfY5BW4aMwP6DLC%bRhg$Ye2cnOVqzqZZja{)*#5DBSdP=z3eUT?X5qUcGxNAa zvkc=;@2Gt0+uq)t>ym6~@IYw#xYU;wB~!yrObpvp7{|`mJw<4P`h+UGAT91ip9U_) z7Etp=@%z3tcwTms@KuS_aOaERX-yA4sGCt&QkU*oQmQkvd4s=_!r{0p!kL@5ERI-r zyLjGn?QWjSB|%3xrT4dOAE=u_Hy&${g41^`o>#oD{fYSiL+QpXV~ZmFpk9?h$t6eK zqs(O*uSA+|T;w2UkhN;!&YZCY?&sdEY`Z8qFW*e!+6u+8Z;AffA`Icax~nB4GvkhSP^?v^9IOXqp?oZf3_t+wKhM7{m- z%zU@krpbYa`Vx4TZzwlac@p-bsKe1~Z_($icJ5Tifvx!XV1wtCNYOB&)+Wd85}x_A zvu*msowhIDi1Sa-Ev#QbQQ%9Q^rbw`sfgp$nLLN1+Akh=`1)Dh5otS|FDjERbEk;Q zqz$Jp_Pra^4o6a_EIGU&toOS1gUF|TjKPi*(#3Sk4rlW@#2Jqs25z*^>Yl&o#dD*W z&G%nlF|o49*T1}g+WkCA=hmqunybd?;COBE`l=^xsQGrpboKS_II)e6YaX*_u>~)_ zlQKiYa_^V1+gGN96!;{}61AORRb)`YXEv6j%(S(2+nPR|H}NeO1-M_L4=b?yV>>+W z)ZOLw1t*T)G}>-w6Or2gQft0id#6N>p}fn)7EV0|=}W~rQ)|D8c@Lkf%AVLAvy$(r z<5z!!vS;2-5w%ys#vjG;+T(e9Uc{N$g=NJ?>(Y~A@_lKh5qt92blhC*b0++t@gym( z*)2SWjT0SmJBsKYpO)>(B0e!~389(CwiagPa^w!|#PK@ddC7{6x38W!&6C1DS;@Dv zv{e3$kBv}wY=_l@XQuSbJK4wl(i1;xCparA70ntb6ZGQVuw>Jf7TqbndbJDodEefQ z<0avFtByo|8PKvYSZeM3JUlMje)3hjHAg18PTrm%S}m~d!zNO()oJ2h9$%w~%IHOR zKh8Mt*>0ir0Dt`$y^BuGk+as|cpdS)|KYqj;dvK+)VBW67_eoZYa^F*+85zX)&>^G zTF8gG`1UVI6&h#})G5z)Z$DHoUC2l(FF(6aE{4OC&Re19mzZhh@HKV}PG4s{?|(RN zWIXS4&7<2EPwihGbF*VXZ}OGd9IJ)iiWDxtd2^Ne9kPE$>Blh9-uvfVUAqpef^@k7Bk zgp0v_q3kEW9#yC#JIH%o7$>}C%(ulW&#m}owQZ`?g2U#UmBMknu6SPkG1~7Be%3sb z|MJ{~`Eo1w9u7&m)K<2?`}h>jEoUcqsZ5x3l-E5@**Nn+(EHmLg$}Ap6Jpz^Oxa-G z-P*o#;WIxRuN$6sy~nPJ_Z!W{yH{P3NjiRaQlYHbtg}$bZkn&f}7w8QbD?`yHd zAzUPN?WJUP%%KBrx}I5)Q;#ZtOb-!~oopAQBXEqTc#p|GQnX&o*&webp9w9;=6aNs ze5mGE<6N_Ordpu;m^}P*BM*!ea*o5+^xZraid@SQJey0-jK9))dzGfbgV|iI^E_mZ4H~P3i^eLY2663pu|maw$^(!Yv%K8>g=)p10GQem=k2*{kY7 zZmq>!(EtOdn>lWkY;W8|HL4zro?91w8d`T zx!Yx7%8W@}Rr_BXeBdigm^MrD?AZ8?IDM&j-sw$}vp(jGQx4x5x$9V`X!Ys*?EZAS ztyTy6#yv=*>=9VA<>HZ&kVQg@sUOvaXV-*P2M_Xio?q8$b>vySUR|;wj@KK{8+QI$ z=V01()nf~z;LB+b!T3`a(b3xyo(&eW*WUXW6t%JOv)2C4bM&*tuGcK!;@GUds_^>c z{5?9k=HVRd)m-@d79TusODQv$jBE{`)Ig)Mwda z5&(_58 z((t^>3vx0K@NRsPmzyg(Bl1k@fRsqW_`?lj)#j#ru{dffAh}WRb#{@^>Y0YBHyn4S zr&!63KjmI|b}+iSJm!MRsd8?yWQ^H`LPak)L^@h*1$8+~D?Hjvan6hTl#@=&DwBtKNPd7Ck zU&=k=7XNGvpTOS$DaX0YCf==dq+^raS>ozIR#_B#$48td~M;oeC5yeQ0| z@g`%nxN7?slTv@SrIwE;S(L9A_ZTOO})MN zdeg+HcRtr=kttKM0>`Im?!JCt64yYb{1&GPjkXcT0~eXk$e$4WN{aCe$GZW~%Pnc> z)K13O;g#6hw!z~#UhKPmM9(4L-zhuKhcElCm)?SBuaE8vKWo%wetHS#+x<3Yi+Ji+k>;`I$uD&ad2|9(bn-xIyw zfWcRZ)V(Tl~Bo16)8T`n`ix_lzKx2N$tl-R4@ zi`{dG_;tcnzmJ}B29ZmZ`Udwz;Pl<}7v6S}yj@=`;#ZdxOC|EM-K4DzSLd65QqVza zWwMy7Ng?}5AFUt}qr-Ca`@6SKUD`a+lJoVa$;Go@rO=FCC2rBh@dn{}?@qCJKR52O zlfqm9>*+^KZC#4}k8QHP^Ui0hM)l(}D{fS_(E57?L{H`FCm*x4T>3`CN&k6l-y{NC zPvK)DHGVl9Z!n&>$G5g3~#sDjT*`3%1;;oGOrFWhIQ zaeD64?4Cr*T}{hbTOER=+9bsj?>nqAr_vvacCVDUAGi3rOW=$2-F0r1RiY zf|Mot})^f3uTEDJzkh$P?TT5Um;-hURyy9LiXgK<}BA=h}`Zl92D*Qd%S z*Dcc9`s7V>Dp9nUvq&=kf?#+XTf0=KMbcM6rR~j?Q+bZef3jg|M(z4B*#;|?<>J3L z+KT7R;#l7{C19}JY3+jD@5Ucpu~V-3>`ERrF=6%rvm1<}njmOUul`@}r^MM~3mUhfYa>&8)hU0nTrk|0@IDFD5 zyCzMz*m;%}|9$P+3*+CtHw_616(2Kw>zDhxyX`WnUY~s3$umQ$lVg9u#ETcZd9Os} z*z-)^^I;2)Hv-SQA;(79TyVpz7v8}w}IH8mm9#r&5K>w25 zv6zMv)9f3bz2tq-YwEOsE+3OLR@4u0F-b4#2 z+59~`%j=#-HJ>uQ*;<@=K&&laVbGPkJtaxp;N%X8&(@Xu_udUI@zknqyRFT3@bLnD z>(yssPGxg9KEKb7(-$@%-xJ5}bgeFvz9akzhe9f2nstL0Rv$Ljq}I357Ed;G7LDw; zzOg(=A|+8}VoOSn!A z+Tbuo{cbvM+P3qp1d^>6hvyBkQ#gHh;CZ8~w1u9!D^oAl*tojtU#`D&W>utj%|pSW zOx3lMRjm5HUF>rVuzMLi)5mPD=EO;+@6R@h$S{i6yP1bZKH4-5zusc-yguT^VVfW1 zuFYO1ea7&Du!805^lg`Vn`K+qzBSw4s1bbnSbIA^sp@XM+J(#GTF9i=?49Qq3%f4l zIr_sE@i*&zO0+uHxAFM zO?bQaaMK&HX}z(pz0%i+aSOfkOFmk?_4rp`kFbNvJ*&I-`f6{l4}E@0sBU?F|Cut9 zO*GNpN}VV|>k_Z+#Lrtio_F=7^;ODQ#X`$;ZXe8WQ9rlyV$!VI(!L_W?r(f+A8)3) z-25uDN8Qi8{%fGLEw921;f_T@1xL@O_ipwvx^+Tk15V#vc-}PCm%*jFQzVT1d~%4{#89TM9}Px~~UsmEMVJM2MAQLzeL zJ83q5lzvU6#l^zh1YWaj(^L5Siv&FHK6{Gpos&!~Ru?(<-6^~u z*A=xYJ-O=2dFA@lz%I+?54%@qY;sqKD>u**Tm4#c`_AeMYWVMA_TYKn%4Oe3s!*1V zI_BnJtIpnc$Upa-BJd6$T4FRPip(WBU`$#bIFns1%c0=I8xkK8cHZ(3@z)0~M% zw?55d|1c?Xj+pXl&HjhGd~&v46SSc8w}(d>MFphd-(RHQd0kvrJiL%T@Yvsp%hN{n zdfJ=`dmmZPcIaGgb7;;@N(L=2b7}P}%`O$4ws*IW3NDxxk>yvv&g}EKV-0nlDUWuV zgT8;#9}E1i7C>&)!8!E*DI1OpJ{Kbtjve~{o0UR7nZWw{Q{#sI-(C^1x08np#gi;;K_inj z=gP~@rBgPNy%_r$_Bkc>)MZ=$m!a4wWZ@poG3RN9R!45d`Uk^hEmd zfH;AmguZV^?RY`3za4?TO-AP?fuO%1i~2|36{B8Uy;h9Qth=`W+hj%^3Q9 z7y2z0`rQ=zjZ-Md7LctVVIbikXkO4fpx=<7-+LhYZwEp4MfOC$B|tVrHbXW--@c>o z)X_KP$Uev(X#8kS*MXqF)nE)_03rki{TkAc7#XK_-Lng3v+yK>R^AfVhLK1(^fF4>Ada3gQc*ng;(s zx_yY54eOUF&;<33bVIg8wn2V66$JS_>U$OlHwaqu>>!*VV?a1SkPjeVV1=M>Xk1A5 znIOp47!MyDBd&=c$X^f!*&mG$>5k?HjRVcm3=o7x<467`4MGG#b`u9dc3%K84+M=L z&E;GW5s>*HsD2>`vZDlu6bSNV84%<%Xb#a_s(>hgV16P8$7o)aL68rjIy4`czoB-h z-Vg-&+ENg05ac8JAef(^^Ex2N7tyg92=b*BAge%-514=$vjmkLK-Pd*f>?l@9t8Di2Vx7d9t8OjI_Cu92toou_D=>$0ND+)3nU&S4#W?{8-xx* z1Mvmf3E~4n1&IOK0pbC&0c1N!BuD^=I|$N;0^$aO^l$}1db@y30>O9@7PZ6rW8msg zpICohaO??!`a}GP4~-q^h{lEWfyU|&5(u&dBot&5$VS$2Fyxy-LO_B*P&phVly!{S zZUxx}5(<=jhb!z0y)5kMyAsVM59VwUukb)s8N)bQ~K#jb# zthBrW!7GsNi)P|&&gRz{9}SDy*@v_MJ-waDUfxu~Oq;22wSf?O|sNk&{-ChUMf)qLY;sDb9vffw^v% zPrZX0qyexwdDD=I2?Bx_8^-H~u`z2@5t}pF(T{2EFoNO}!5fuOqX=v;9JFqb24}CQ zcF82z!$?DvrIk<(S|Mnp{^p4>%39BAnQY7&WcSHXBj6F3*)E>m$Yhg8x>Z8WY^Zr7 zl(ThNp+y4Jutxd|4dfu|Gj)c@o?p>W&=_aH&L$7WL6-gn2Kw2+!i?iE3@(aYQVsp6 zO3NXWP6VrSg9dK&oNu2douKfenUj@g_=xLoBMxcqX^HhZ9E1(%`pe8?@d6x}ljPUQj!5P_Xp|u)&O?@%-AN zzn-7*V}`6_9(^xIc&!mP@?MxWNd6=m3N(btj~_YLSH(m@4fKJM1jo?)$gm|O*;SK< zycaxMk)X(`p>cY&cWTG?v$M%cD@!W?#*5-bCOSJ3%CBbheXY!-va`uaD}jOFYQ@RC zI);w-UQ+qeY#+=58V{`Df0zXcX8*&@wv!v!+L=UiE!}QAOG~C0v{o2e3qN}zHd4v4 zL#xDlx6SP}9W&$6NQeAw3DlsKHHW>;&g|7IA0`{qv2~#a`HrQGot=-VqdgNNC#?z* zlI-PArok1=@VOPw?gdYw2BHBn!YaT_2TZE#S}sAoxNxXpxrhtYAivfvcXFx~drN~F zCBT4n7~XzP=sI(-zc%EugM$RruvR03r5j;|R_pYPixn(3h!j+B9|khidF~KhiE0vB z+syIE5=f4YG%`d>m76ca-Xu!&z$~yV>PDgyT|7yy2~BRrJZm3;S3y6_i1h36gmDd7 zr?(>5XMbZ&9blA)FoAF@N1-zaZ<6xv2?mM0ff}@e(Rjd|aE%PLE_ubdzokbUYUChP zs1OJ@pa$7sjaj|1?VGA6%o--_9s&r^rHB!0uisGS~yTY%ox836hoe9>CpY{Q#|Pd zSVw+n)vHb%vJQ9JlZWBso+>bFz@`L38PxCr#yRGk6{YC_x;C=>?PsmA2pb2X64_eg zZRzP7la<^6qcUXd2B<+c;8-hfQ9CyKD%7CZ3;l?}X{4KkjKP}+a7WP~SBgM6pDhjZ=Hg(b@9Dx-j0htLZ(Xy!y7 z$=He6iFB~DDY33UpIN#YTwXuMr^YUW3{J`7`|`dE&2Y{@xD<>PJpm88ik%Bdv{7E~`A{j>%zK2Rsgm6f0~lY31tU7y+wN@*6xWB=tCw_=mfg`7oqt6 zsHMz)l%?gA363l_N9&_o^4jB6QAA>r{p#8%uSg)1i7pfxoiRBsFfzur2UZpee8?03 zaXhdO`KQ@tUFr#b6lWrxO_(^2h%iI(`oGd($Zo%@0ZjI<_T+Hg-ZNv!@cb(uC`UNKHW%~YsqUcR)c+3eGCFD0GZ`?c7bOcd15c|D*$o{2A9m65fI;{2KUGLm7340f%rydkkBm#;ezW-r)swIu-gC( z(-U8_#^Y`yv+hzI#{#Aem|DBQT^8D*d@h|5dDX!?ZO8`D%|G}xrrT#=;{y#$9{PWx z`do&7Fc0w}Gu*tL>4ax@_~LVv?O}(4`RLCp7;aaX>&J&gqm%t;p0vp&g>MGdLlgsy z0*coYXAXJq1b^4f4XuNcNH^wYgCGbsC{lP;90}2Cxo-v-q#Q)PpW^{6c~B3Yy#NNy z>DW$@8e{H>a1RLmFr&-QQ5jpObTXB>=9FtY)sN`z^Aa|!XnbY(fZdO|8M*n-Q~b!5M1VOYwVe{g&pZOw6_2G4h&rM zAFfQ8U;o3PAc!(`E<%XcISJ8wa42q*`pa$tCH2dr3UD+K~ zEZtx^IzSCtbK~~!s+k|wp3bU)>4y6(?+sLVcB-{we6-Qy+faiH2l3$7{nWz4Uf4i| z&N#R!W#=&qc@`UBerKH;+#MSqxXSoIC8nvN6CS5wcV@S{ipn{uf6bxiy> z@$KJSHGdsl{HQ(@ABb?V)?Fz9;>1+u6_Dw@zrF%G1~Sm?HsRQHr3&NXb}x1|){Qvf z7kebw#Qxd_zm8(RzApT{zh*5tLfwL)T|iZ?X0fxylDTMp;D!PG`qy^*_5OfH+CX&l zb`A_sTptozD7qEx$zdM=WB>Kl`Dcrwz=u5K*LM3ikuQnF@`7l za{ur^pY_z9=;BTDB07^85H6iO$P8(Uw;O}uLsyrPp^;tT(Go3Cn(E`_PM7wkxypQR zBSZXgOjMLc&)pcV8_85x3Y82L-`f#M&Lkhu`^O39?u9m*K8Qn2|I*daDd-Vhx}ity z@5C}r-d;Z5RCuUEBzsX9(C09HFx?)AnK`h*y8^^E48n^J&AsSEbn_=aLfhe#0+yc? zB{J9P2&CT!ikb8;c43(r)PuXC5tufhp=_WNhh74p#*Th2E@YY?gW~DOa3QJ^{ow-; za0&7-_V_;4!1eu@i0G-t;ehvRne)2aGf^ z=q&(XQ3jTRmpy3k-j42MCkBy3r^81t!;Bbh;sJ~@BJ*y31T+7I7l3~$gU=z3;eBq% zdQ63p8Hvo0IRXZI;RPt{5QYkYZUh|bbql~)M=(YOFcE0Te51geLMqwSn?WHlyoXy` zKNk1 zV}e(z@Mmy_83F6PE6W7XoEepv#zP;2(a1!{K%z6*h2-bS@S;#D%!mFyaD5IWc02h3P8(n|lU znE?CO6W~JV4Z!doguPe-G(v|^sC0_=a2K1uwFJ7qof&egp(Rf8BvGBn&P3*tbn>P;kr;67GmM@; z8Ugc<0>o(a*lu_~bNowpNVC73U@nr8F2p}Y6rlO(9Fu7zZLrtSXdJ9J(qM0vgP|9O zXcq~aLU<7e{)(>MJ|u=4#4|70<7^}|OT!ondrt`T*dZ(cc;q>Pk+3(9fWr=dsO3X} zEg*VlI!wpk+W^D&V`kSQS>&%{1NdK0j4CFuURwf~b;Mjd%t6Bmc*lh-JB;=}8Vymf z5TO6ayB@&eW@-qJJHg~&h7Zd_P z6GxphUyd^;gSlAXb)F}YMxwe77Yu(i0)`(2h^VY(%kU<`T^l)IM5ezs1h&7PfU&R` zVK%6KUXH`wO?__zJl~I*N{wVp?Bf9dVuxT7wDTN31~ES$0}wMu9s&0<2;vAqgsClD z)6u#kIl`6%?NLZxXxl*?y3v78&)^)~L=WS^-`hYh-;bFNGSd3Pb%d}#x*e5+{7q|M z_}dw#4$NI4Y!YF=1vhQ*>ePqk4c}V8T)}FfIC&7^yBzw^810?OPOxWU-rd3e4L;R_ z%foO^#$^275ES_9iBZM(zjlqxz_d4}%h1JZggO4FApz4rod%nXeBEMwQUDaJBj!j( z@=)xNJ%X{mR$%rv(oHsgasZ1jGW#9L!||RBczlt_{7hp6>;3e22S|Q8#~g_~Qx(_* zP|<~tWw%M?lVHe{` zCjGzW%_z5R7zV>v=>-f79k9J@yGs^3Z2-qfZMR)-zwf6dn@&>E*wav;5gk#aXp$l+ zW*A8(>gGxQ^6=VLhvBt5()TrRejh#xocU?2@4-#_lAA2R%|qhO#9M)`;}lc}afafl zBKNV{H4CiZO)7i)Dp}_CAwqD;ant_^M>c9E^JnLG42NfX#|G|X{sAE z^>JsJbE#Z#T4u3|g9t{IzLXDw7ml-m(V4nh(!rF`E9Y96xJIGkA|s_o6z zWy%n7oO@5e%tLsksv)TmEY#-{Svghz!W;6_SjU5#w8U>;vRf9j58XDF7>7VG4=G*>wp_n-+C9HA;d_f!kd{AYt;f8oT@h~*~n_|fw z@s%Q?p|WKPdg*4dTL+n}|3xdeggKs1dqWG`(y%RR-AN_YOM(l=l}A3ZtstPeAtWa$IBEj0uzCd#joW<7SZF|dn>w|%geIk1K*Ye)g zQv-rNkaY5=1&ws}Ahg9gOd})d&1NOsY+{BP@tJOn!Am34i%755mvq*z6v$)Ih4}5* zwGlo7rt%Q3;>ykvai~{K3=N!8)gIr{HEluoei}qQXhQs^wf6M$tNekS(y{r}jMcGI z`ZQ2Bn(nF?a7TS&DZ6cjHwHFcDfv|0h3D?G(Fz1&F<~#;7jy`9- z0COH2O-r#@jGGni-o@CZQTB$~%z|mTKpjif#yhhibmu7~(=}_Nr_Oe!j|%d);x#B<}rLI?=BxVGZ`@FF$Yx~=B@)Q?P3*iDb65#EmKbo z%OIzb$u81^n^@2Auj0Q=Z`DVT5`YUR!H;DyH3oq>4UA@_dDoFG*w>G29XmS;R(9J- zkZwqdI8)HA2;1l`pwWzOv~z^+f_ArzdupLhWCJc6U=;^R_EJHVhx4&}tJ-6+yqSB) zSS1fJq&U`E76)?yU|xM}B2Vh7VE2*K^{evaK9!pbGWOG0)`Ku5tt#7uCI6C#iU3wQ lk1*_KRXN21a|I(y{gr7>KLiJL8dTG-z=brmoc(|Q{{l^mo)`cC literal 0 HcmV?d00001 diff --git a/conn.js b/conn.js new file mode 100755 index 0000000..fc83a40 --- /dev/null +++ b/conn.js @@ -0,0 +1,22 @@ +const mysql = require('mysql'); +const dotenv = require('dotenv'); + +dotenv.config(); + +// Connect to the MySQL database +const connection = mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_NAME +}); + +// connection.connect((err) => { +// if (err) { +// console.error('Error connecting to MySQL database: ' + err.stack); +// return; +// } +// console.log('Connected to MySQL database as id ' + connection.threadId); +// }) + +module.exports = {connection} \ No newline at end of file diff --git a/index.js b/index.js index bf738fa..d5260c0 100755 --- a/index.js +++ b/index.js @@ -1,31 +1,198 @@ const express = require('express'); -const bodyParser = require('body-parser'); - +const http = require('http'); +const cors = require('cors'); +const dotenv = require('dotenv'); +const socket = require('./socket'); const app = express(); -const port = 3001; +const server = http.createServer(app); +const io = socket.init(server); +const iosend = socket.getIO(); +const conn = require('./conn.js'); +const connection = conn.connection; -// Parse JSON bodies -app.use(bodyParser.json()); +dotenv.config(); + +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); +// app.use(fileUpload()); +app.options('*', cors()); +app.use(cors()); + +function timeStringToDate(timeStr) { + const [hours, minutes, seconds] = timeStr.split(':').map(Number); + const date = new Date(); + date.setHours(hours, minutes, seconds, 0); + return date; +} // Handle POST requests to '/post' -app.post('/post', (req, res) => { +app.post('/', async (req, res) => { // Access the POST data sent in the request body - const postData = req.body; + var postData = req.body; + const query_search = 'Select * from tb_data where fase=?'; + + const result_search = await new Promise((resolve, reject) => { + connection.query(query_search, [postData.fase], (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }) + var now = new Date(); + var hours = now.getHours(); + var minutes = now.getMinutes(); + var seconds = now.getSeconds(); + + // Pad single digits with leading zeros + hours = hours < 10 ? '0' + hours : hours; + minutes = minutes < 10 ? '0' + minutes : minutes; + seconds = seconds < 10 ? '0' + seconds : seconds; + // change the time to 24 h format with no AM/PM . example 12:00:01, li + time = hours + ':' + minutes + ':' + seconds; + // if time only 12:00 add :00 + + // console.log(result_search); + if (result_search.length > 0) { + // get the last data + const data_seach = result_search[result_search.length - 1]; + const time_last = data_seach.time; + console.log("ini current time: " + time) + // console.log("ini last time: " + time_last) + const converted_time_last = timeStringToDate(time_last); + const converted_time = timeStringToDate(time); + console.log('Converted time:', converted_time); + console.log('Converted time last:', converted_time_last); + + // Calculate the difference in seconds + const differenceInSeconds = (converted_time - converted_time_last) / 1000; + + console.log('Difference in seconds:', differenceInSeconds); + + // Check if the difference is exactly 30 seconds + // const isThirtySecondsApart = differenceInSeconds === 30; + + + // check if time_last is 30 second ago from time + // if (differenceInSeconds < 10800) { + if (differenceInSeconds < 3600) { + console.log('data is not new'); + postData.time = time; + console.log('Received data:', postData); + iosend.emit('datanya', postData); + + + // Respond with a simple message + res.send('Received your POST request!'); + return; + } + const query_insert = 'INSERT INTO tb_data (fase, voltage, current, power, energy, pf, time) VALUES (?, ?, ?, ?, ?, ?, ?)'; + const result_insert = await new Promise((resolve, reject) => { + connection.query(query_insert, [postData.fase, postData.voltage, postData.current, postData.power, postData.energy, postData.pf, time], (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }) + } else { + const query_insert = 'INSERT INTO tb_data (fase, voltage, current, power, energy, pf, time) VALUES (?, ?, ?, ?, ?, ?, ?)'; + const result_insert = await new Promise((resolve, reject) => { + connection.query(query_insert, [postData.fase, postData.voltage, postData.current, postData.power, postData.energy, postData.pf, time], (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }) + } // Process the received data + + // get timge by hh:mm + + + + + + postData.time = time; console.log('Received data:', postData); + iosend.emit('datanya', postData); + // Respond with a simple message res.send('Received your POST request!'); }); -app.get('/get', (req, res) => { - // Respond with a simple message - console.log('Received GET request'); - res.status(200).send({ message: 'Hello World!' }); +app.get('/', async (req, res) => { + // only show 10 last data + const query_fase_r = 'Select * from tb_data where fase="Fase R" order by id desc limit 10'; + const query_fase_s = 'Select * from tb_data where fase="Fase S" order by id desc limit 10'; + const query_fase_t = 'Select * from tb_data where fase="Fase T" order by id desc limit 10'; + + const result_fase_r = await new Promise((resolve, reject) => { + connection.query(query_fase_r, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }) + const result_fase_s = await new Promise((resolve, reject) => { + connection.query(query_fase_s, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }) + const result_fase_t =await new Promise((resolve, reject) => { + connection.query(query_fase_t, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }) + }) + + return res.json({ "result_fase_r": result_fase_r, "result_fase_s": result_fase_s, "result_fase_t": result_fase_t }); + }) +// app error handler +app.use((err, req, res, next) => { + console.log(err); + res.status(500).send('Something broke!'); +}); + +io.on('connection', (socket) => { + let userID = socket.id; + console.log('A user connected: ' + userID); + + socket.on('scan_dia', (data) => { + console.log('Received scan_dia event: ' + data); + }); + + socket.on('disconnect', () => { + console.log('User disconnected: ' + userID); + }); +}); + +module.exports = { + app, + server, + io +}; + +const port = process.env.PORT || 3001; + // Start the server -app.listen(port, () => { +server.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); }); diff --git a/package-lock.json b/package-lock.json index 5b113cb..bbc7f5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,37 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "dotenv": "^16.4.5", "express": "^4.19.2", "express-form-data": "^2.0.23", - "nodemon": "^3.1.0" + "nodemon": "^3.1.0", + "socket.io": "^4.7.5" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.12.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", + "integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", + "dependencies": { + "undici-types": "~5.26.4" } }, "node_modules/abbrev": { @@ -61,6 +89,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -279,6 +315,18 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -320,6 +368,17 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -333,6 +392,63 @@ "node": ">= 0.8" } }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -888,6 +1004,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -1137,6 +1261,107 @@ "node": ">=10" } }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", + "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1214,6 +1439,11 @@ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -1246,6 +1476,26 @@ "node": ">= 0.8" } }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 761fd80..bf94bc3 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,11 @@ "author": "kicap", "license": "ISC", "dependencies": { + "dotenv": "^16.4.5", "express": "^4.19.2", "express-form-data": "^2.0.23", - "nodemon": "^3.1.0" + "mysql": "^2.18.1", + "nodemon": "^3.1.0", + "socket.io": "^4.7.5" } } diff --git a/socket.js b/socket.js new file mode 100755 index 0000000..c0d73f3 --- /dev/null +++ b/socket.js @@ -0,0 +1,29 @@ +const socketio = require('socket.io'); +// const socketio_client = require('socket.io-client'); +const dotenv = require('dotenv'); + +dotenv.config(); + +// const socket_client = socketio_client("http://localhost:"+process.env.PORT); + +let io; + +function init(server) { + io = socketio(server); + return io; +} + +function getIO() { + if (!io) { + throw new Error('Socket.io not initialized'); + } + return io; +} + + + +module.exports = { + init, + getIO, + // socket_client +}; \ No newline at end of file