From 340d943db3ac7268df75a4f191f9e5909fa454e0 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 10 Mar 2026 10:26:08 -0400 Subject: [PATCH 1/4] Initial Draft to conversion from SML Mod Config to SML Session Settings --- Content/GameInstance.uasset | Bin 7038 -> 9109 bytes .../FicsitRemoteMonitoring_Debug.uasset | Bin 0 -> 5772 bytes .../FicsitRemoteMonitoring_DiscIT.uasset | Bin 0 -> 5818 bytes .../FicsitRemoteMonitoring_General.uasset | Bin 0 -> 9362 bytes .../FicsitRemoteMonitoring_Serial.uasset | Bin 0 -> 5784 bytes .../FicsitRemoteMonitoring_uWS.uasset | Bin 0 -> 5753 bytes .../FicsiteRemoteMonitoring_General.uasset | Bin 5811 -> 0 bytes .../DediUI/Debug/FRM_JSONDebug.uasset | Bin 0 -> 3961 bytes .../General/FRM_SplineSampleSetting.uasset | Bin 0 -> 4213 bytes .../DediUI/Serial/FRM_Baud_Rate.uasset | Bin 0 -> 4203 bytes .../DediUI/Serial/FRM_COM_Autostart.uasset | Bin 0 -> 3547 bytes .../DediUI/Serial/FRM_COM_Port.uasset | Bin 0 -> 3654 bytes .../DediUI/Serial/FRM_SerialStackSize.uasset | Bin 0 -> 4103 bytes .../FRM_Authentication_Token.uasset | Bin 0 -> 4179 bytes .../DediUI/uWebSockets/FRM_HTTP_Port.uasset | Bin 0 -> 3629 bytes .../uWebSockets/FRM_WebSocketPushCycle.uasset | Bin 0 -> 3619 bytes .../uWebSockets/FRM_Web_Autostart.uasset | Bin 0 -> 3685 bytes .../DediUI/uWebSockets/FRM_Web_Root.uasset | Bin 0 -> 4298 bytes .../General/SplineSampleSetting.uasset | Bin 3820 -> 0 bytes .../Session/Debug/FRM_JSONDebug.uasset | Bin 0 -> 3694 bytes .../General/FRM_SplineSampleSetting.uasset | Bin 0 -> 3945 bytes .../Session/Serial/FRM_Baud_Rate.uasset | Bin 0 -> 4079 bytes .../Session/Serial/FRM_COM_Autostart.uasset | Bin 0 -> 3549 bytes .../Session/Serial/FRM_COM_Port.uasset | Bin 0 -> 3528 bytes .../Session/Serial/FRM_SerialStackSize.uasset | Bin 0 -> 3939 bytes .../FRM_Authentication_Token.uasset | Bin 0 -> 4183 bytes .../Session/uWebSockets/FRM_HTTP_Port.uasset | Bin 0 -> 3503 bytes .../uWebSockets/FRM_WebSocketPushCycle.uasset | Bin 0 -> 3453 bytes .../uWebSockets/FRM_Web_Autostart.uasset | Bin 0 -> 3559 bytes .../Session/uWebSockets/FRM_Web_Root.uasset | Bin 0 -> 4134 bytes .../FicsitRemoteMonitoring.build.cs | 3 +- .../Private/Commands/multi.cpp | 25 ++- .../Private/FRMConfigInitSubsystem.cpp | 27 ++- .../Private/FRMGameInstanceModule.cpp | 159 ++++++++++++++++++ .../Private/FicsitRemoteMonitoring.cpp | 52 ++++-- .../Private/RemoteMonitoringLibrary.cpp | 8 +- .../Public/FRMGameInstanceModule.h | 40 +++++ .../Public/FicsitRemoteMonitoring.h | 3 + .../Private/FicsitRemoteMonitoringServer.cpp | 8 +- 39 files changed, 281 insertions(+), 44 deletions(-) create mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset create mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_DiscIT.uasset create mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_General.uasset create mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_Serial.uasset create mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_uWS.uasset delete mode 100644 Content/SessionSettings/Categories/FicsiteRemoteMonitoring_General.uasset create mode 100644 Content/SessionSettings/DediUI/Debug/FRM_JSONDebug.uasset create mode 100644 Content/SessionSettings/DediUI/General/FRM_SplineSampleSetting.uasset create mode 100644 Content/SessionSettings/DediUI/Serial/FRM_Baud_Rate.uasset create mode 100644 Content/SessionSettings/DediUI/Serial/FRM_COM_Autostart.uasset create mode 100644 Content/SessionSettings/DediUI/Serial/FRM_COM_Port.uasset create mode 100644 Content/SessionSettings/DediUI/Serial/FRM_SerialStackSize.uasset create mode 100644 Content/SessionSettings/DediUI/uWebSockets/FRM_Authentication_Token.uasset create mode 100644 Content/SessionSettings/DediUI/uWebSockets/FRM_HTTP_Port.uasset create mode 100644 Content/SessionSettings/DediUI/uWebSockets/FRM_WebSocketPushCycle.uasset create mode 100644 Content/SessionSettings/DediUI/uWebSockets/FRM_Web_Autostart.uasset create mode 100644 Content/SessionSettings/DediUI/uWebSockets/FRM_Web_Root.uasset delete mode 100644 Content/SessionSettings/General/SplineSampleSetting.uasset create mode 100644 Content/SessionSettings/Session/Debug/FRM_JSONDebug.uasset create mode 100644 Content/SessionSettings/Session/General/FRM_SplineSampleSetting.uasset create mode 100644 Content/SessionSettings/Session/Serial/FRM_Baud_Rate.uasset create mode 100644 Content/SessionSettings/Session/Serial/FRM_COM_Autostart.uasset create mode 100644 Content/SessionSettings/Session/Serial/FRM_COM_Port.uasset create mode 100644 Content/SessionSettings/Session/Serial/FRM_SerialStackSize.uasset create mode 100644 Content/SessionSettings/Session/uWebSockets/FRM_Authentication_Token.uasset create mode 100644 Content/SessionSettings/Session/uWebSockets/FRM_HTTP_Port.uasset create mode 100644 Content/SessionSettings/Session/uWebSockets/FRM_WebSocketPushCycle.uasset create mode 100644 Content/SessionSettings/Session/uWebSockets/FRM_Web_Autostart.uasset create mode 100644 Content/SessionSettings/Session/uWebSockets/FRM_Web_Root.uasset create mode 100644 Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp create mode 100644 Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h diff --git a/Content/GameInstance.uasset b/Content/GameInstance.uasset index 013b20a8d9db96a8945944d933234adabcd08060..fc760bf2d6a27e82f3f88ff223393e60e0798c5b 100644 GIT binary patch delta 2502 zcmaKue@t6d6vuB7+Oocav+&Buw6w?|qtJ~h3^!a$**c1awhyux&FZ6jZVl}#;l0kW zXttRB;U5|$SEv8zOcwpi#3;^0Bg^)O#zf6VB5qThusMhO#ilMXnt^X|Rp_T??Kz7crsi=vcc?4+k`03meEfDru995?oF<7Sf;AtT&fwISpNPwwma ztYRDZ09YLCt@jt_PIwl&j&^vx2mXBb6TI6{Wf;KE83L{ez+x@r=3R?$r5p%3Atu$1 z<F3rywaxA}xEmq`}Ny&yHv)78Lq=wL4Uu8NC_Cr%M`}a;ktNOCw@Z(+R`Lge(bS zYB(tglBy=;y+~EQjBFs!_T$-Sa&adG@Vw_RQXARKuUY=As+O zReZ}}FF`M#d3`P3ZTz;LkS^(2F_TndF*pVRF(q}&&;vOxh0=R6P~{?jJ&xC#YOrkD zdT0&k$!THkl|QlSzA`FU?t0**;=dlC(Una$O1%?s#I=G;O`QrUT&~FS)*dL0eGSn= zns)i9%J2D$DrkkmhEI3ixLlQEj6?hCQ|2wXd9CbA`;~8|bMqoZ>wsx^uEQ?SdP^r~ zd9#n7Sbq%ud}M-*O^i-1Hk1R+M=?KoddjySPn%xA8MC9Z1vt6dvJU+L|J!yvX}0~3 z+yU|!liUWfg-PatY}Lp{T7NV3mw|Yh+mzyhxx~8s2%(V zblmFF@F~Di8Y%*>(D5Y~{>K{R$*Yijx{$&gMFX{3=HW7>xCh>a_-*4_Y%8}Jcfrk* zj&XPSeuE*5@9=ea-oO_(!>bb4tggT__wxne@tW1Xl7g5fJ;p~^;byzHl6*0pxw|;O z0Pk5cF>=}Q?W(HrH|=+eIyYn^sFHeQfx&s$&1tZozc^{Voqs-*}ToT;A z`6;D2sSHMCDSnghaoHFFjb?C9%uV&oD=taQOHPe`)fwPcR}Z)N zJy4+`7KQ3iFMRMWV`gA@GueSxydK?}*Ff#s1hq3TfYial4mljK znP-CAym|(h|6TzNw7{(puI?pJoh=r1nou#A86fkFv8aPN&>Ac^S(aal6D~B_fnOep zmx02YfWq5>!h3+i;}AeL#Q=pDfx>GLkQanG+z#s4cat0V#3w%&Rsm+z$-E+7V&+f@ zP9PlsWfx0Mz9=F$xm!d>%nT|7%(x6KQ1)TT$%}Ur-dEd`0OX07hZZ`Tzg` diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset new file mode 100644 index 0000000000000000000000000000000000000000..f37a9086977445031e4d77c55f6516eac425f467 GIT binary patch literal 5772 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 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring_General.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring_General.uasset new file mode 100644 index 0000000000000000000000000000000000000000..fadc6dcf34fc5f96ed1ed795c4f9a7245a07ba8e GIT binary patch literal 9362 zcmeHNdvH`|6+dYL;T53Bs|YqwB!owvyMeTfHv0;JJeDMM>R<>ryI+!RclR!P?*_I? z2U^4`GkuSC1a&53`an9y5uwVo%1mq3j)NVFQ*DJm3e>jLX=kw30><;ZkKMb;W_Qb@ z>P${@@BO~>o%8$7cg}ae*WF|HFZ;pALqkJb@`)zhK=dI$`JW2;T61jks*7vSjQ?Oa z{rujo%a#-{Z_nHXTXwhj51u+P`@o-Gez!>G)39p!4+1M;=p(7tHx0^BkM^z3ypxe(}=>XY7v8 z@t-bd-uu0SXWnrddikEZ_&*}t^6$a1bj+BZ51I|6-{zDpvuuexTm~L zC`v#Mw+U6{tWxfjRMEplLK#J)vtEQnR0=X?0hRGRpIZ-lZ9LIJe%h;QE9xq%?XF5k zO@+r+>v2}wS65Zl+8v(iTIVXKCXCxez79c+v18ULU)KLVn(~viOW-z+T#&HQ*M0pG`E5rvK&lUHoai* z+vu9^a8DpC=t!RH95g*aSyB^17oR$H8RqK|R)yagloW;bOt`Zh-LO6?MS3;6`tN(C zZyY!<(&_!A7jA6`Cy@qD)U1OIAy+_&1f_Vh6cV)k!Jm|((omBK$Gp)1_cHd`O@BM| zDzKVmw(COvOGU7trRy%?OTyK?@w0aqFxxBn?v{E)qwJG{fqNu47syIP@(G%u#vgzk zUMVWVs&4w+zYc6dv)g>VA|%n!(Y@OM-=;=m7WfLbv$ncuu9Y*a88w!STAm`N4MSr1IAo40olcs+xAEk%kt!K9_D`nw zcpM?OUw2i3e5m8bWL^(`=lUvo?${GWlTpyeJw%u77|83G&8+n12l}@>U5wJqR?}q)K#V=b^{Y<&CZ( z*1w+z-x#kBDfJJ`nx4!j)V{ysN8%>tgTA0Y=$}0B-D0HCy-XS|_Yun>VxVkt=nSAt za{pkw`MOwEISdP+YA z+&mpFE1qey74H(;ZK!LHB}N9X#M?$16P-zzTya^+%rjI97G#FwWBmcL;!iBrSlaE= z;$P%C|7EGS#DGHo_ZsOBijBl5k4*Lt$1gQ7toXMt90k~5XTtx)Vmsu_wFKVJ-G=_d zS?~=pVyF@Rx8h?_mJWZW`68G=qde2$V|{C-V$PtRTE6b%3-rWQ;1}o+iM#0v;Q!Fz z&NBz3gjD)OI{W`U%x5bNRkUHiNdLluj~L-fN9pj>$z2N`{E|9X7c(c@oV11)L#bML zwKGpBw3d}JEdmhTEEV&l)Sd+efz50PgKS}t*)W+29w_E3OVxx?G<6YFmR#UqNicG` ztZ}^UU-7y-o8@STH#VPRxrA17eaT#{s38=Qqr5mylqlN9Z)quE9l@nR5#r^A@biLL zM7w!usz5chYOkdB=F}pL-@_JS`vm||#c;9P{|z>TqNH>p`mb&IavhVh0CcaYDpY9z<>!_~IeL~dap zgt@jn8p$az>`B%&)!;O;XH-ouM(yOM03(DMDUTKy5^LFiUF^pIxi#6X9Dy#nhs^r6 zkcYOhmdsvG$|mEGzI5COi>@r%MFx(WEl}Bh^op%oyd!K;9%U;xeU=}8~moH9=_VV*2*Z|7%{%p+RY;#eM7~b28BnK$3I+XEZI2env4iE8k_cJJ&VsWuxpybBP>!|CpFyUbiDn}488y?|Wa}BcW|(=KP(YVCxP?X@VKT|8 zk8*21S3I++z_jY4e_*f!jqni;YE45%b_E=ef^zN(50?M=$!QHc9FI=>!XAz#@dK*#vkMc@5sU}xEFFTRRiZ+;C00I2WO>J0_I|5a&)p4H_41BaJ@sQ>@~ literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Serial.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Serial.uasset new file mode 100644 index 0000000000000000000000000000000000000000..a9dc2e273a606b189b3d9eac3cf28b44e194e57a GIT binary patch literal 5784 zcmcH-ZEPIXaV~Mb<0PaZ326<+5F9(n*=L{6c7jTLpV-8{i_ZqCV4U^c^Lb(K_Po1i z=V%>5Ya*Z(D1g+IuOC)jqBICgNfRh)t4LHWt=b5oR!~Y(i8LvcNJL60%}3pt-M4pp z_Qe~8X6(K9-h91z^WK}8-DBUYe&x%_$;lnF0T#{zIEO9%!#sTMJoaGY#k)_<{d^RD zwrjBZjuOP}SzWecG#o#8;=Ppz{`{LyOJ&48_NNi?r!C>rpKWV9uo`s0JOS^P@w|~NSa>d@~)bg@bYZ2#t@WuCo?Z3Ev|H0*>*;VnA zHHbSqFmdV=@AKyu{lzub@>bBf4srXw2Cxm=nxGg{MXi%1WsSAVDN&OZF_ox^GF27j zRFr8N4%Hf;ps@s!n0f_?-Y8Q*xF5fsGRmItAdshB3!f z3Nq^O#~1dUq0SMUGrrQmnZLNnljOx!h#0WYmf*NWQG{$nk<(1kvd}v5vA7hmeJzqC z5Br(KG;}RYo?G(IuM>JJO9-)S2V?OrIg(KlEc!5$I$6I8&%E})X42=CGAxbzqJ=VI z9FEUh(@nGHu+gllvE;o>p)G^Qv<2%6gu1e628(Za_GBpu$+DEQY+1>~Q*<%|sf3tf zaMa;HO_D)L7PK7G#aB;UCi6oq#S}aSai1ipD(snme;2w1LW+-xYK zxiCO(ZB6AhjlbtMu3AR;^36l7TK+Yx2YFdafSgvKCAUh(0!cv-H z`s$Cyx6`ttu>qD8VDhc+50m<+rerMYYvH9!WNjDQnV<9RP1;f7?e1erf>s{EnN?VG z+gSZ|xlW1Kce!Y=OBK&kgypv5&p?)WI9a z_LVLo!Vqq@!P_(L=%MRb+!S$a$Nrm%I+F$PYKI_|+i{_tE6=WVEI__?rU`yQ6X4YD z!_U!4<6FY+IqRTx@DmGa=!qMb<;OX(mpA;F-Gq1ovX0>27;h?!F3`4`FqQ8MTLCyHe2;wLc6)R-mK*VI=*LkpYn?dl+)<3f;mQ21-gjmBI5pI!Qa6J z>3l|b|4|AAGr&yxFIaRF-)&qEo$pcJKW?L+vjM7_Wj>-%ZWOE zz|R@kU_UF}j>4qk%qI*A%hRh59TVyLRwU5dAuCC&6KTerR6boJRwuP4)3SoKMvkKD zW%Rl#pjeJni6t?_vpCilOzFo=Z|qsY)Db}&xQg}At(=n9euStiEwPZb@(T6vHCND1 zn+>bf>sV_!6R;R-DFB>$POdbUVafB(qPegVmZPE$te=M1bx}_zwIh@4WNAr^Q6b4o zOnj-p3LT&p=(^<&g`cT<%|kUU0a=$L=4uI|6pC4DOCnM{)jbiEgoFwdp4{$+CU>(( zC$*}SsKY5KtG_XHDH*2o1Vyi&!OJjC%*KmPf3KmL)Xvv`4IKS0$cDRP;|4zV=wnkduV(~xjo_`P%w$A2pN!ch zh3UhLJ5;9RL(5cZIZ|zcGEl{BMq1-VE1we!6NdgN$UYQKeP{i@1$l~x?Q%RLG5z)1 zKHXEMHUv7E#IpnDRf6lBFlGqd1$kcoz%jkVAQ%3X&z!>shdhOV5_i?dD{{&gv;%;))d429?x8LWj zt#>yzdYS?)-o|EkW39WkLBE;&GbTSadMQ9NrXYx{+F_s;LV zGhA9Cl2AmFiY6gaE4iVqRi}u6VktDFirUIjs!EM2l%|a+X`xbRXg*X;Mbjie-I;y+ z?%vslUqq6z@9pl)?Ck99?#%3tKf3DR#}gA1+hzb^G`Q-H62$E-uh_PyJ#pmp8#f+)^SAGnsfc^{PrKyj{q663uxb6_l`kFt)ez#& zdQOg&wLiA}_(La-jI6)ha4q8QHZGmm9UKdsS^U%i{pN}#w+s2N+b?fBbY#(< z?2^Qp8pNF+7(4rJ^D`Ibo~j%1zY=z@MBL!@01+%}!g5@fjSiMn4c4ZnWJA^DRDVs3 z>AI|@V$3kGsn-M~gY_ec=~w8{lesU3@=Bl@zY{L}Agr4Oa0`}UZ*wrz*tpiy5N>Mn z2Lgex-|z8zntcAc`Z|BOo-@;DCjOR{0?fmbI$xYaSbzmMU;0(!ukNKcOTRWe9{LfS zs!W~t{=&DxwKep&mm|Zj`g&b{KSX1b98zQ^8vhyyVvQtLSJ%6}ZqJ%PEXFAShgXld zCR31+!=wAo9i+-naLmw+CeHfe3Qv#;mms3mMw^dqzotpqsHUcwW@Mpt>}`1gVtf6H zqV5PXg&Am9nD}u1`^yNuk@ZXQY=p5yry9*@{VcYfDIKg&hwmNz<~owstYlak7sY7F z$O$+xdubPqn#0Djy1|n7GL6;?9yaDw7j){(rWwq;?&&jS)Jav9oMsD4#vZ3_8A|ob zDF(+~!FQ-N)K?oMjm->h^)>V zf#|0LWY*SHUef3r4eLpVWKh=Aij<8=Nd`OjzfeVkCfisl6V+tgVQ90P{&DPek`+-= zuM0DNQ$`xJ_ddYld2#-?UVN_t(NQVBUFv5W)wra{4@zWQlB}ntIDcOzWqaM{#5w zmfkwzjUf68C*vy5(vzcW*3v@P#NwKqHfnMU&TS6wzV+?kVjDT2YOKq&5q#Xb=If-V z)m5zU-fw)T)!rp6#qqRfTWBH9ZEpX77Bn{sEN=3amD@3swm{WzdJUdXFs*9r*!k3Q zYz0}Llu?YHo^VT-&NSgag!jn8-Uk|DbFx5r%M?P2TQNS2rEZ;(Ev<+YZt3EAIWcFMIsdC;z4mc4ZdS@Zg2} zUn3XQ#tbPa84{e`ee3}3F0m49!+96YKRR z5OrEj3nue@gnX5P=)^~^pI|z^|De3Dm~4)GWFP`3c@zW)rsKPS*o{Nb4#D=GHMnL;B%4-0d>HJRv)5-tTCY$(f6>?~Q?-BJw4)O&Xpr|SOW42TP zH;Yyimd}a$>KjDGp(rN*f0M>sC1lXJx~TubCZFbL*+Ym)!6RLd z+|zkvM{l(p1u(J0Xmp41=ui}f5O+R2kRP6!XmCul^Zsb4C!%UeNdX!z*DD{H5z9%f z$+W6rT9KpZJY8N{1?0Sus<0&bbe6zWf@ysi)Xk+T7&BVFn&^`a6nhQd!EsCXT*ya_w?aYk>zq z1qSQ!8-OGXK_3jF6CrE{?^V56_QC*Sb?h-u^xA~2H1ZKPgS>rUI8sfGKEDpLgbw#Y zTxc~FW7*;J&exLMjy6c)XfBwFDG~bQ$C@uN8__Zb@0Wp2NPvtIQYgs<6@ud)v|lgU zQHBub9mEyrg$KbJZySVR2lk@1$n)mcp*VHs6pgNKwabK@5Ncqc{a#%aM3T;GM^ua2`&K7<1BVFB$Ejc8c z@mc3(+i~B573c(3z@4xKx?wfe>O_ku9$sGoUMz{`6YYA@Zs2XJXI{=Ol(h>_Jq0Aw zy9HDXDk+Q_mfxYIB=1@#Qys%5CD)dlHLp_nI9M1b_%n~QADnz8{lYvvIm0$Jkx>}G zT|2~g3e6^W2UA2`z(7jyC5MV>oOVHA=Z_ata|*KGUkHsrni9~hilD?S04No<8q|Tn zYV&wxd$!?33LONNBs?AF+nsoW$`J~rP-G*Zt8gLEvmb$#5?gX<@>rn$To$Q%#D00O*X>DufuPb7xQw%=`zL`tdA0W^{b}t9ETwXDqRiInICV~xuM&Lb zIqk3c^K%PYcQrq~;P-dM!tM^c9`wFKVCCEivnjrGz1ZUPaM;bC7elpcJt1FRtq*5EIu#poCFXIoo?Jz^1EMG J)tXJt|9^w{wF3YE literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/FicsiteRemoteMonitoring_General.uasset b/Content/SessionSettings/Categories/FicsiteRemoteMonitoring_General.uasset deleted file mode 100644 index ffd8810dae8e706e8d55b72433ee6c4025b3945a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5811 zcmcH-ZE##w^(;;LL7RSAXsC^Z0!`A7O|scdvxQN!Um>MQw%MfO)R4aH-Xsfe_if&L zn{?4)Yhy(_g96Sd@->s82(^q+YwOrSrZYuU#_2GKQw7@}w8bLKh*J^!VLa!)`}V!f zhP({WlkB_qp09iEJ@=h+?mM<;&66KaOiXN_1#s;(0Pkaq|1bxCw;#KE!=*dU%>L&n z{PO;xHLFVyx3|1v`)Ehv;HlTHKk(<5-zifNxBK;-$)7ZLoO^f6rUTW7kNjpBac4Xy z$ICjtedCe)PaGWEbfxiH#C<`(d}3Eb`myGt5qCA>e*PJN7`C;MWL!(?oh+s3tW8NLbwy342Wn$X z(~?R$#&jKrT5V9$*#MH5CM4Kok=_=TW~wBk(h^upPh37h*KB~Bu=RQTbz%>xU9%)>=*5__;d)5bIF-`$E zux`vXnSzWQ9=&+-Fm;aOoL|4*z?n~U^91eVazyO0(H7#kSyiQ6R8=xe)pO7~{#J4k zV*8q9Ss4j2nd!K>F!BDve|(nEo7sRA&$Tm_=u)Ctb%4e0WpXF$*WkO)f8{pP7m%|o zgPze_vdILTn6sjrX3b+`IZbD&txP4S!ESxt+5(}jT!z7dB@dr2BOyhR^Oh|x8UGHQ z&2V}knPzar6*@QLAN`i@_`$kB8Ojolu^>y(0WwN%5?Xc!NzEM9yyxo0F9iWv* zab^ux+&tEBm0qaI^uM-}w`*f@HJQct!Gz<&dx*5 zHl|A1FIPWb6TLB-1P6Crge01^% zrqWkqkoc3%Gl3JIxu;HiD-3mx`b?Yc`Yxm0LYz0ZiUA$rw?&`wj0u$6=w}CWjH(KB z5zi&W{nv(HEd=R&Mn(To3J24`bowvabQ9mrLJytqQPDr|pkJ^7sw%Qy)Db2NREnM- z+owc7b)D!qG*jvS-=sO$2pu%9Ci)9(`JL8i?uQ`fo2m5Yi8JibyoC|C5;0D(X&s78 z7o{m;IOxE*)r4A}5oe9;n90oajua*sx0O67Ko{2{924#Oax~oAuBa)j8fnhFl$E>@ z%So-NjG|)Yk*8?9tgfyBatu;smcn4q5?F08wIB1o;kkmTqmn*2qZQHHIVs6KfvAsK zWFc$Sr(aXM9UWK2Yg>DX6Sf&_D+$~@OIMjov1NYul)14AmZG9|tf_|CRZ&l8wmqBb zWEnXb$6H21l%06hz^Waf4(Qd+AB_;xcojr-E&*AWC+4dQq7;hR>P;e2Y~?!oqlZ;2xxLHWw6QN`yVuTnhzeGwzJe<+9KP2}q)bG-`4|h2XdY z_pcB4F$rPLJA@wSgZsdoZ#zU_1f|Fq7O&-psi~z!7JWQ#mkB*#v_MDu=~N7He`nAl z7dX+)y|Q*@zR*~F(p<1u&^qvBS!?aaQ3iK~PT3H0m?ydh_lT_Mhc$?uBV?_aKHiE= zJ*1oQRa?64xUa%03<9fQBW!~nSckoOF(QhG_g6s!wnX!au}_Q}`Ph`S^z1}kJMpcj z{A5J8pn^FjjY-6eJ5;h*p=C04X8DxrZ!^{!moF0$EBxw=aScqXD3j z*&L7nfjQ=x$yO3_A|(+5Qxm=?#>YP@v EA4glumjD0& diff --git a/Content/SessionSettings/DediUI/Debug/FRM_JSONDebug.uasset b/Content/SessionSettings/DediUI/Debug/FRM_JSONDebug.uasset new file mode 100644 index 0000000000000000000000000000000000000000..b7736ecf49ccaad39ecb1b5baff85d4000e5e0df GIT binary patch literal 3961 zcmcInYitx%6u!_RDxy3DA3R*Nia@*D((Sf|fb64Nw$cY|3n)mP?q1rF>C8Ga+p+`+ zrYOYl!w1G60!D-wAi)|CL=1$8(daK@A_hz&iW&%*fCxyzdcJvVciUZy37+iCz4x3m z=bn4+dF|1Tsavo1^z=NN!`PjJ8M{Cu{n#LS&bM@)KI7YTY1oOPZQesc=i`JMd>3PW z8eKs#qKWzf-m2)lT9HLvQAN4g73P{IDsq_XIxRI;`Qbz@byw#HbI zkX%+s@71&ywmWqjW0PnsDk<`n7Y7P`(*uEWPm$XlbO(LGV9@6;^?1C~iw)*Ki5Yr! z+(CNN_{UJj-lGWweL&*@dcL6N_wdHutKu61pXN+0nXqV0*N*XdyH9`DJ@3Vw#@F9j z`ol8tLk<)fLbJgvKr=cdn>MY)S?ru%;17ol3S+zSw+-q`Aw~nvoUbAcNDtbx;vN%c zzsbBku$zMrp%mJ^w04CfsuXJvl6`SeifU}`ngd53 z$v~JfBNXyA*2SA7F=DYUU3X$J)U1%>tw}ZKAKx-(G9iPN4H{Q1cS#<&u^|>E-9oaa z(+Q*m+tabP3K|C`MbMK%y5H}*0c=RtJ??f+WvVB7!8Y5_Ad%SW=4#5za>Gi4AaZJ3L6GX0C%5d;zW*&Y-Al z_?4XeZ2_MgyrV*Zb_gIhv$TnZc1&8BJ>E5twT)oeb5pSxELA!c|@w$pnpjACz*?aI~GxP(u14&+3FUHtM zXNMlfr7RSrI1iH(!m-)Lh0A8a?h8dtG)+xz_I#Xdv|Qw>#(LiEIXHsorbV=R#jkSm z0CxD}*(C)%s(Zl%OVGo4-dk$2ys%-FsAoSvE-{EEsO%o}G{ zLj|*Ok9OjykefyF%9rQ76oP$yWb_ziV!e{fTqO%eÐ$cB}vnVy^V|m9N2*f|W=( zDG{i#t&VSZ8IhJ6n5?*K|1b9$AEYoh`dfHpg-=<@=I;A?{{tXrEDDW&w*KP2&mPLo zU|5jYPMvQbVr-sPDC8af!Ib7HCUqeo=mI;vcHbLtIV;wfR=HseoX1)x`L^V5=Y%!@ z3DpK9eYS)i%8jjpt~pSY9J=BVWCs^Ca!4%50i%xP1_uU*t}2w)xYnX5sBQUbRT%+)J8e3r>gnOX0xG+#$ROl{sy8|We^70aozr3`p(Br8Hlz9SP z_7pK?@z?)QQJrb^)oBN$p-Rdt&ze7Kjek*jnrh8qMH~9^p-q@(5mWh41^|zl1G_?e z1=jrE_%0J4N&sLWKC~Wyf%vAFY#I5?J24p?H_3GHbC4mKWR zzO@)e<7H~e0B9ew0lW+kfJCLq0`6K04t%f?Mue0t_9~(-3)r$j&LsavihS_6@FIZf zUSmd`9#WPCke4dc#$(JRKb4+s4tY32T03E4(o)GGN&^>RSc2p?X&es|#m=oMO_?)Y zaxQV9Y*LHRDyRvsrg7cq)cPyYm(A#_47Rj=;W>sFUtEq#+{kl;GH$4bl1v*nQ}-;w z+4`l_1*busY*VsoKH2D&yXkK1YZ!}N2$0?Zc8D{hJfZiLB)Cvpx-ur0<%h<`MAMrY=JQ1H0*r^JI-vEa-qEiAOp8;%! zq2{s|VIKkbY;(|XkWrWrOrmEXS7S%%PxM=tcdT{JJoXLFW4kW|0NT3B=I4HOWJ;mA HH2D7ky~T3m literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/General/FRM_SplineSampleSetting.uasset b/Content/SessionSettings/DediUI/General/FRM_SplineSampleSetting.uasset new file mode 100644 index 0000000000000000000000000000000000000000..4c6f92b412c030d35d8a6de87b96621faaf9ebed GIT binary patch literal 4213 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 iZ-X5dKkhX*9Qp;7)fXcTq34)uS;3> literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/Serial/FRM_COM_Autostart.uasset b/Content/SessionSettings/DediUI/Serial/FRM_COM_Autostart.uasset new file mode 100644 index 0000000000000000000000000000000000000000..09f254119ddaeb21715f3e4af420f7625b4a73a4 GIT binary patch literal 3547 zcmb_fX>3$g6h38FKoDdR1P3j$cBX8ll~Cx+bV_SCI|Ym+w6D`kc`}_hymzN`K$Duv z65H<|2bwvrO z8B)lq)7ZfaD z6{5dc8P0AU#?IU0efL?04s+Yd-)a7yePznQYZHD6w$=Yc9n1dQ^4;RVqiiU3%v7l0^zVJAv!R3Pgc5w6-}D7yZs6}gV~w= zBQ2iu%NTb7yeZ81*d<%aV_%8VEPNp)!XPHierZe!eVq~!J_fHs#1g)$xMW-npTBx_ zoz?dzq|{=xbIrxFhhQWe(bc$go1qKOR9yxzMe%qvS(}UtTDJG+rU$^$btPG?YjL5= zB$XceO@&W>O^c?OqX!+@ITp;c73%`j+40SVM_ANQBch^3iOG~6DnD02;B~@)TZic#KwfGvmrC~YJ?S9h4uBX!GTazQ)FsaxAvdA11=++ zw=l)c9)Gq1008Q0UFBG2RHDaTC>zYoN-ZYn>cCSYNAaMl;W_p;HL>XIkxMwzY9+Ek zX%gjHM2V`K6`U13H{yJTG)5+OAgG zIov5M_0mRaTRiq9fW)JeD@!`{YsylwIEFoY5`qvXwZqz3(u7?zrPj5-h?WQK4#FbXEv49+)ImfB_bwtB}!jk zJ~8TER=*LqI>?>70ZkVxt%Iir*6((;#c(Mq~m@5XZwJJv{UYJGJAk9s6iU0}V4Z18KXwBqOwpFRw6#sbgDzx}VH z-y)j(P_VIL#lxNZ{bQimtLhICmB+a*bGk_-s7Qs*w;g>QA!er$86`W$Az18jO7H!- zdj(ALu6y1zL>G21Lmda9^=h9p>(}}SZ{_cbnAI+Ubfxh zLY>tQz3Z$uy&rnlSa0tC=*_leXi$tmnf!C>O|{hSs^{sao`e0})_p94z1zG$n{D31 zzy$UXB8YVm?#{l*SsQXTm9pjN-$~=mu?2W=6xsc3mwniC+q6~8CX@YJY4&H@6JXMh zMVN%kzQyVOb+4Dnez#`demOd@l{rH)r{XCFd6?~+Gq-obB3fJ($J;yq2C)XN8NNN6 z6+KyG7($vaj?B)atD4t*W)D#ZOmqH3tT8IgdciC+GAj87Z4p*oD`1}EqpOg5P3a6r z!k+i`euh~xw(uJer-i4WJB;0Z7MY;|r$E#AyX#vOS2_r#9^~XQAy6`xQLpu4_Tr@+ zHebpp;2;3)rYti}z`+#&a!P=?nJyfv2_ai*X1F3A%N}Yx$eC4W4J`=FS@W1vB&BGM zOOMn%5iJ(urw_W8bDp4RQ6s{m#XNYlddfAWk?<@80YuPYtD$jrYog~UIn3v6A)+E9 z4Yj$r5J4#rkS^mb9`zFb%R=0Apk6{S@zeo1xtTIcw0ya9>~;d1Sp{X65)t0ApkC$y zJ8m=(;u@5i3E^au)m`8mW%AepXMGGi`QNm+uI+2{E;)G`{x|^Is?>5W|LH;Be>E%D HWLX9H9V#?hX~dcIpGVg4o3qG;b^0# z3sORA=(maXqMg~r`xu)^W3alqvU0w^Qj#jF{8Gh&;3BD3T3F!^)>KOs6@i5$!q~Ji zmYt{WXN*iTzb`&uDe9+j+*rnn=y$y2$KO7?eyX;s?^4;mQeWw<^selHR&m zy#<{(C(a8)M$>ErtD)I=`jwVG47XTo-8; zI`F45flx`)5*cvPr~})l0LZl+$IYiqcC@HomK7V z+KQb5gvIGxfrM-rthjqd?PEYwhS1tuR?;Us^DtR&=CC83aOUMTimhHDUnMqQxvk6x}??Nyl+B%W7(c0(sU#F^J5ut}-Z1bWiZ@_)@l`&;Wk6sK52}`*woXeapitYLoxnrHeb%PCjGH_%P@vXxfOKuIGTJ^JXjL>{_UN83O6ldaW8)C2P1v@x>$_O}Jq6$k=R~B_#TGN7* zdF9G%9tK=jpnUq=a!*)dca(E{a3_6EjP4{iE6=|DbUqt4uXXqY`jAQ}6A-TA;mFw= zd{ULs<;dU6!pdz1-Yi~o{404K`A^Y>UUa!?zz2+kueI5k&x~ae{2_WdiW<{8jl~|)GRrfU$Gw|Ju=Cm8E2wnbUT*{W5eP986rZv&A3 EA3~=Ls{jB1 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/Serial/FRM_SerialStackSize.uasset b/Content/SessionSettings/DediUI/Serial/FRM_SerialStackSize.uasset new file mode 100644 index 0000000000000000000000000000000000000000..27be82e1f5fce713f1dd8594ac7026c97a924e3d GIT binary patch literal 4103 zcmcH+X>1f_^Z`W#)>=}nVBtJA_=Bk z8e^hjj2DRnBof6EAd1FfBTC{A6GP$wh95vg3H-oRKo0ABbF{PVE-NO!bo$Nr-rIM7 z?|swLxnTR1zP`RyBLKz>2e^nU{=qPOEJN%!AZSxTK!yN$CxZ1-) zLJ`z@)+VVeDkTL~l7(ceJ;oG8kdiT`s<>6`LDnoZL=Y_tyl4;CM;rCmn93)fjS1@* z$|`~~{NITxN$YpF0nEnL$$3I~?&{>Vnqbn!)D$ETqu>naE`;ilix?a2&kxlhXWbJ%X4NEfRBEhSy8B@^CWbkh5+(P0w z#I>SUPUIB@N_Nf)k$XWwNr`->hD=%a`mcexhznOWC`>kz+izE6L#i1?M3Rb%io^`; z?c85Yg2ST3tNkWj+kNr|VIxV^UD1y%nRX(27hL*z75XaQVg%lh-H>#ULyn+|gEQXnsDYtk5w z7Je=asm`$qe%e-JdQwc`Ik#a6({8p6&prj<2n*M@@O?L%K&niH%h( z$z)!HFVA;RxD{Iq_oa0H z`)5ubzDUDGm)o)QncRYfXUCpM6>Zn^tJtwLuwQ27Ey!B zU(fCU#U@uj|0Qt#^k}3-naT%wm4`DM4!lN1Y8*sRs`c0IqP%#g06C(tHR|h=Yr)9 zr^8bj4EoBwl@7PZR}p~K$nF!zm|U#r zvva@?SI~_nJ1Z*OZg07l^SDDUzdP&=dz?O}gL73v3kvyv{V>~5mIJuC&p_O7tbgGo ze9(BO^J2naKDwC9F^D(g>qWlO9DK73+ylmX8TsfELtvFRnC}wumFR3Y<@*!)7T$z! zzCojfranO~y;eRN+60C8Oq&bw>Cy_zD>fJl$)h7fVCB1xanP~){{_Z|ZfJhvoo+rR zP)%!fZ6Yiyipr8jq^pB)bQK|>Q{6>M5T?^`%mY?^x#Zul$R}~7_|R{tjhSX2wcOYc zods53a>>tP&a)vIxw~J!M!O!}|Hd$new~kxD#bF9Y(x8N5pvK)1n*aEyqxhX3RATU zXKsTAvuanweA=ngYXSr5WV6V$iGV0At~GeeYG?Y~@*&Q&(lTmo8g;HoLEDGgKUWiW z881E*271h-;j0FOqk9p-Y!uR()vx}nHaEc{o+1*c8Ek#&!u(KxoS&)CzQMFYx} z$z&p*GiZ6wAbkuFm`%V8J0eoi>z6c#0kYU0(?L#p3%iv&hI`0;+TZ zD-+PgjbMmwDvB{0DF^Wy8b&uY0%}48rVUW6ZL^Eqw1r4L_(}i9rCl3ri;sLyQ8p)v U@iS;Y>3y{5+r#r627>ti0dMGuxc~qF literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_Authentication_Token.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_Authentication_Token.uasset new file mode 100644 index 0000000000000000000000000000000000000000..eb13a9b6fb55222213b2a164878c0c5d6fcadba5 GIT binary patch literal 4179 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 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_WebSocketPushCycle.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_WebSocketPushCycle.uasset new file mode 100644 index 0000000000000000000000000000000000000000..47a4c5944cc6c23cc5c5ac4b89d1f7fef3f6abaf GIT binary patch literal 3619 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 diff --git a/Content/SessionSettings/Session/Debug/FRM_JSONDebug.uasset b/Content/SessionSettings/Session/Debug/FRM_JSONDebug.uasset new file mode 100644 index 0000000000000000000000000000000000000000..4db593f14f04142a3969029aa6bc4be0ab2b86b2 GIT binary patch literal 3694 zcmcInYitx%6h4$9DxgROm6wZD5h&Z&cH2S(_t7n_eaRLupw#K^r5)MstTVHvi;_U9 zmKgu2sEN-=N>EHl6;ROxL&U`BFaH<mzfE29fo5yzA-CBO&$*H=<%5Z5p<6g_b>E6(HU z$wZfLF&X7DVk$p#`S~mFlb){r4}$yZHtagQaA(Qhx%nUU|2SB;b7IRY?>+w0CI|+f zCHzd{S&nhMsk~acw9H-VE?E``hm9Sg{RMj_jNV~F1I`ZAvIazTEOYs7CeD7deTQJU z*^F4}*t?V0h2e-QC-lOQ6k!vls-+G=XC7<(gV~TTk%*<5Qwc$ z+E{8JCTSYw_s*}v@q)6Jh)JmisIu*~-~Edi7ph*X3DvsRv|cT16H#VS6W4SW6id;8 z?t`^p9EvHDo>pma-|1_>*2HzMCymXYb*diP*Nb?vNtM}u_(-uM+iNE=vO$Rpx-jvZ zX}9yDvGpkt8D{4@b@1FgMmI^3EmE7PQzBAK-X`hnchFf&ND)CZ^wcgmlkJJ?J_;UR-_H1hAt8JDObokul zqcGt*DV7vrzFBw+y|ixALw5r!YjUd`V*~QtJ)LB8Y?g(p(a`%tN2c?>d3dc^38;ea zi;jN2@^mfZuQ!UVL&!oK;|u!r@~_`<`_*WkWvbhy5b4$jNVfzkbZ6A4awdbNlPmCYJ8!)WnaiDmE_ zbER+XdigG1jR>HYK)Z-+@he@l`q1~E-h=I|>9i$4J%1kh`rfe#3@b6&F9TaA8G$z< z!^ZapayTb)i0M*L(k1HOap+aJl@&UqRqvV!2eH;^x_1hC#SF&tc}He+qBC!<;td0g zglEl>M`!3uBC zM;n-E3~#lolARmub+#(y9#OO0c03xoI9~Iuxyu@_aLQk3%{lX@VKm*}OqZX94*3m$ zqXJN)A26rn`II#HTsoIxkzsYD}OQ`jR_+SGRp9R2F^5{!c5eajI;G~ zR0g-PyU5;Qtur-WWOSgG9Wg*|l<_1$&y%H5P%c8cw>a*77fXugXymLKq zeR=$Ut|=(K04t{GV{>UZzA=RbY$7-!;8}Apyxf|O9MHl7>{Mf$pAd`aHUSx%|L`Un z6hOu%koZ#oKnVw=*%E#0xBUzX1JKR@97IHDMF1J>@fErn0ForY7LzuPEdraz_@Cn& f7x(UPuQ>h#jEDamPUt*c@o4UMUo9@Okf8q;u|y}R literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Session/General/FRM_SplineSampleSetting.uasset b/Content/SessionSettings/Session/General/FRM_SplineSampleSetting.uasset new file mode 100644 index 0000000000000000000000000000000000000000..ac7f921dca6a66dba9d31b7c5b3ccbe68c1cd35b GIT binary patch literal 3945 zcmcInZ)_Ar6d(TCA|eQaC{`D(@~^#?QfMm*_U?Mk71|!XYc-Ns=Juv#VQ+Wcool(O z2?-)dOo$O75h1bGpnM>ZLJ&>R1~A4?_>DlsL=lvriH1=ATHo89y>8oU%Ljewc4ppt z^P8DB@4b1~vw6Y38-0C!YsV3C|5!r)f)@VB82J8Jcj)5p{+-t*om&T zhRTE@AOa?Q@4&*i_P6&DG6!0Jd1;luDo|EdQdLz_US3hQv}9?>Um7Y21cHkz$^xK5 z$T?8PO|Q>|Lx}PAi4M>%X!pT)5WYP-^Ezht?pS&BX7|cm-+}|jX06?DsViLHY2}?M ze`VsIxG>`2MkYXSED1vI0r(a!T;f~oD=7>_qqc;Q0|lL921`KErlyn6Z^6!Qu;!8} z4$u7$w(dhCJ_(EpkL+O>7e!@LF?dmk%3#iPHBB;d`Q`enc&19jP}8xr!N`iPv#k#z z$24g=V(JDnd76X|{h~|;u3y*H40G!EL)#w*X1sx^tc_|sq?njGBRU4v_eRGsq7Zg20ua2L5@jV~?DaPw!L zubm3qTDnoJ=xk%l&7aPKeUa}l@_NsFh8C!0S}I~H;E!My_4u1L_H0EPFgtQ>?{0gx zqB*mz3604KFuP9I7`Zm?^klr7`uKV#_iwQBeD{?+U`MFDfwr<$x=dB2gK}_qw1Q<& znUQHcy$wCr4S|=GL@VQ{i+Vw3*>|j)WODE4o6*Eky@d~2XwAxlx4@@Kl$+rM*;F?D zEi^ccGFDmEW9H)yftT{^u$X*w=OJXL;sfvV!0edc#z@8M4ctgfCoEF+B^oToHuj(K z)N}k8gb|5>AH@`d9KDir0x!k3QWV?>U6Z`q^y&+-1`Gv0|K<{1B4{ik0<_r)Yx1Knr~6S9X3go%0kZY)BPY?Phfxp~1I5EV z`~A47;nMt$HMz^|uw$GCDW~M(rX%m8yNQq@R`s?S=s03r>+0<-=wj1=4<{e^#1L}% z!xbQ~36WfST6CTf?JY>W^F$w4aA~mKP0*V!gkHU;1n*hV;;Xsv9`t%a4^t!3NO;#l z&*!LR)hiG(Z1C|w%7*9FlWeWg_1v?Kh9}@gT{l0=x_97w?tFY?(I)udqC4z`4+$T} z;RtnI0;mj@%ey;>S11Hf)R0Qi@ABXyo)=T7*iAP4+k@~IhzST8!2<#P>cMw7{r|n| zWy9~+9KMGb*`r{jpz8z^_hJnJga{+)J^^x1mhlaZxACBXPYgV(JFxF?$nb)eYSM2D}ntFJ;PkPN_-tI z&Ak-25JP7~!b1v@DlzjSWf67+@ohxPB9tm!cgP~_2x4+Z$|Bt5_eP?(j}u%k!2TTg zMy-)C@gvQ28d5G=QVN~yIo&66y3bpz!y69;9Mm|jd4$`$aImu+(SJ;|ZYF?Qnvg!+ z`6KW-ppx?wK+3?*7L(k`O{kBQnH&a=t1eMh*IFegLg9&&xGp6bwNfUNT69xlR9@$b z3>{uan+t_l%%qCeKo!+0kYMO%DtCGj#bD55T$Wbp?aY+4R5A{=jMT2EswCU>i@*?1#BAEVd9eF!bQc!HaPwWC~VhFH6c-1PMK6rOK`pxJabafAO?*BiE0U{q}ZP1 z%z_gXnhe%6S)0PzafWAU0G3l0!B|H^>mnU?8vBOqE}Gv}!fQi%!)XXsu2~6-Xe11L zB-d96COr&%q#?q8K!_y>(hwmsu~0?I5-s0lqQ&(WEU%CntL*FW9lTXyOPl)K0_0{m;cP`-Nn_g~L177Wz?7xvM1M*si- literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Session/Serial/FRM_Baud_Rate.uasset b/Content/SessionSettings/Session/Serial/FRM_Baud_Rate.uasset new file mode 100644 index 0000000000000000000000000000000000000000..69b5984fdd213012d2df589c7da68fc23410d983 GIT binary patch literal 4079 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 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_HTTP_Port.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_HTTP_Port.uasset new file mode 100644 index 0000000000000000000000000000000000000000..63192ad9ad8cda27fdefc7e5105fc3bb171ad362 GIT binary patch literal 3503 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 HW&-~&M$Gl& literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_Web_Autostart.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_Web_Autostart.uasset new file mode 100644 index 0000000000000000000000000000000000000000..385f925f90d5bc59057d9c09679bbe8629b2e099 GIT binary patch literal 3559 zcmb_fYitx%6h7r4A`g+552!9$Ed{z;poJm<+}(C-D}C54R6}Ar-Co*}?anfDw`Eb1 zMnsVK!v`u6C6Pc3Bnku&0fVW6iSmmdCIk#W6eSQfQ3-FT=bOiNx?OBdJn8J6d(JoK zo_k*RwrlOQtyjCdyBh}+-7|>jPagS?viSMEb zh17_l%39H;Nl~fARH^A|ti=}=hM{V)u#l3chBNmi>P1sni>wgR@P%qC8+h8_Pe{#> ziY{3nQ9eKGd094sPToZ{g~!t3Q0eU1p;^WAW(7-&3+MO?W){r}g^EJ{qN2i?1%(VD zy2fCb{QBLz1$(}8xTWX-kH`7>fuFzE4Dy_MWp%};*^T4ZMc(V!`$x8C^P$s~yLXI! zBsVX)0b7P17&4UK22lyWjpS$g^dj$U@2vb_IBZIYcFow9l`dhRNw>Fr3sp3njoCNK z;yJ(U>2A0%n;8dPvIRW%l__n)7g8eZ%B1;T9+N^}u0(`yNx835#1g*hxMc4dzCcZV zgY_OrNU6nWPI`Z}T$t-HB6;aWy#AHa*OGL98QKV=N3%y{JdaM*=UJLIl7*z~|a<)HQ`VhDYLuzeHm1shQSqFAruQs;`Nm-k}48Xx9su7PW z$trdYt$z2{0D==LTVe>^PO;Rc8fwMLgsQV5GXradm0AlM8{dWjp{S|6_%hqdK0ZJ}k) ze0H7Fox)NtZ>G+<<6ec6c$P9{ewUsD3z?U2Sy(_H-ni)R<&={6mn>XsTpe{Hy=;#*<&sH#hpnb*Ogeth5Wb8!r)9H?is{d1CL!v%R zZ|=yS`(L!$+1OA2Gq&zN?5^IRri&$3=;>;C{z3%QsqE5Ni^`e!+EeSw5qpOnu3Sv} zvd0aA^8;K@ac;-5OvHqaYP8BOZ%aHM*<;OQ$EvsP=UK0EY6!N9$clirik{wo;`0X~ z&gfn)|Mh?E{{~5a2LOAEL0d09e_|{^eR}@9UrzkUU73qbDkX|k=v?RicaUIq5s^{0 zVFFUco~Ljh&DbuWl6Tzuv>`hG!6LKuvJ?$3olwROp%OulSp!|?&isV^ju(4naLDl4*{0}8zhMYz-ZwHElMXcx`OFrg518r#iCA+~nEirTW@c3J`PnY4o;Htp zj*YG+>NTagj)X1mYkjWSGG5{vAfknfpgWD-?<_J?14e1Lp1sLG0f|{hp%FM(ere)ikK-ily>3a%T}{NxEzAuOwe9ypb7S9 zdeH$n%$IE;vLho6v$;4FK`DQrY$jSf>La|(LdP$Cg!l*-9*|R`DYZnMi=6P=g=|(A zz%CFGZnU62>Jb5)Y#`(}DD@?TlT21mqjSJ!DnjP0kM}PAm+k$_J377dkDY`)jsqbB SwVy41cF6Z%{6aNo=8VNK2 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_Web_Root.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_Web_Root.uasset new file mode 100644 index 0000000000000000000000000000000000000000..498e32c84a7261579efca1a2d90f637a6a2b5d5f GIT binary patch literal 4134 zcmcIneQZ-z6u*NZ3L@Y5!AA;C5w^8k*KRGyps!t*PP)ytV;CacYj-yvbbaN$+l>-U z(5Vo@A0ilxA0+Y-BY&6~@B<;3DaHi;QbIHk_lFV?qJKyTARo?i?t8Dib}hq*Cw=eU zd+x92o_o%@=iE2Yw{X|Bp`oGn(S(c}MaZAf!jBZe^T!MQXDvQCZ{gcs*5u!%-vDxqa?RpS{}U^9dYm z2QX^eHV*y>?RWPR(mP%g)CcW$c=o^(IJ@WckFi@VA0lsf}JP8U9_J%ybgV9iSt zHJJLOZS`U|wfV&uSTW7}fdr#Urx>HQ)_^TY6DeC$l7V4Wo6y`A z(fUG)F*!lDth&%J4TXeaij-t#G35Nprr*&po@6qf4yTipEZzH4*F(rr6fxbb$VsZO zGzs+oDop^cAj|O#b5e2tmZ`|hSux@z1BbspKMSU!Ei_Jh#02xpijQ_kF_F=Z5LJ4p zLR>rgHsMNM;B~>iym3)gNy*+hb&nx8r82pDg&0rK5Xiutw@Dpcl#!yhj|gaBpQI+^ zV!9DbLpHp1PACVSzrIzaiXL5=O+{Mhx|F1VARc@zRAr*VNNs!jo2Y<4E{iO)s~aB< z-a;-|xZ087mdrR4L<69yn-vLy8LSdN^isnZU^dDLN-mH7b^^MsDY^!<&HT}G=DX8|+YUIXN(U z>ZnDW7hG;DoHrmUAR}kF%tt%LRGg8Qz3tc0a{?U3B%oM5O;81ovUX+{yqhe?(9=e& zcm1|UVU*wakQ_E$I`|D9i2?wyC4hEae(nSYT2?U_oBVCb1HcSYCi+AslCv8RZpX;e zPZv?^H&4eH(#ILx`(=CS6ySqBvMUfF=igb1$`sx{D06aJQ!Ca0ButmNgh{|4jzf@N zic^cC)iAAK;t_WV?mADU)9I-5Ryf@iUawp5d#YVds9QdVtJ+1P04fl;Mzu83gfT8y zJ*{TzSGnA60$B~9|7VLv2IBgdUZ@sQiPn(o zP;8&n`1xP|&0HWb zVfk|>?Ei$WAO39^0As{dJFLU=WicS|wg8u)Zc#~lRFyJ*am=qmE|lNahAoRJn@bW> ziHY-X`aRbj#&r}Vqe0IJu14<89d_GUyy>N?1f8k}`d|qJ4{fCMm z&4p*gFAThhAz_V1GLj3iz#xBdvqEvR^6wg~mq=(&GZpa|LJn43q=?q&Z#+$_MpEs0 zzJU=-O?H*SnvGyAjpzGP<<6kYP(1rx@ F{{RW_oQ41Z literal 0 HcmV?d00001 diff --git a/Source/FicsitRemoteMonitoring/FicsitRemoteMonitoring.build.cs b/Source/FicsitRemoteMonitoring/FicsitRemoteMonitoring.build.cs index 8ab4880f..ee1f2d73 100644 --- a/Source/FicsitRemoteMonitoring/FicsitRemoteMonitoring.build.cs +++ b/Source/FicsitRemoteMonitoring/FicsitRemoteMonitoring.build.cs @@ -49,7 +49,8 @@ public FicsitRemoteMonitoring(ReadOnlyTargetRules Target) : base(Target) "Chaos", "ChaosVehiclesCore", "ChaosVehicles", "ChaosSolverEngine", "HTTP", - "FicsitRemoteMonitoring" + "FicsitRemoteMonitoring", + "FactoryDedicatedServer" } ); diff --git a/Source/FicsitRemoteMonitoring/Private/Commands/multi.cpp b/Source/FicsitRemoteMonitoring/Private/Commands/multi.cpp index 126135ce..43f0007b 100644 --- a/Source/FicsitRemoteMonitoring/Private/Commands/multi.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Commands/multi.cpp @@ -7,6 +7,8 @@ #include "FRM_Request.h" #include "NotificationLoader.h" #include "StructuredLog.h" +#include "SessionSettings/SessionSettingsManager.h" +#include "Settings/SMLOptionsLibrary.h" #include "Kismet/KismetSystemLibrary.h" FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommandSender* Sender, TArray Arguments) { @@ -85,9 +87,18 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand FString arg1 = Arguments[1].ToLower(); + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); + FString HttpPort = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Port").TrimStartAndEnd(); + + if (!HttpPort.IsNumeric()) { + + ChatReturn.Chat = TEXT("Invalid Port Config. Port must be a number."); + return ChatReturn; + } + + int32 Port = FCString::Atoi(*HttpPort); + if (arg1 == "start") { - auto config = FConfig_HTTPStruct::GetActiveConfig(WorldContext); - int32 Port = config.HTTP_Port; UE_LOG(LogHttpServer, Log, TEXT("Chat Command: Starting HTTP Service. Port: %d"), Port); ModSubsystem->StartWebSocketServer(true); @@ -118,11 +129,11 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand FString arg1 = Arguments[1].ToLower(); if (arg1 == "start") { - auto config = FConfig_SerialStruct::GetActiveConfig(WorldContext); - FString Port = config.COM_Port; - - ModSubsystem->StartWebSocketServer(); + ModSubsystem->InitSerialDevice(); + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); + FString Port = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.Serial.Port").TrimStartAndEnd(); + ChatReturn.Chat = FString(TEXT("Serial/RS232 Service Initiated on Port: " + Port)); ChatReturn.Color = FLinearColor::Green; ChatReturn.Status = EExecutionStatus::COMPLETED; @@ -130,7 +141,7 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand UE_LOGFMT(LogHttpServer, Log, "Serial/RS232 Service started. Port: {Port}"); } else if (arg1 == "stop") { - ModSubsystem->StopWebSocketServer(); + ModSubsystem->StopSerialDevice(); UE_LOG(LogHttpServer, Log, TEXT("Stopping Serial/RS232 Service.")); ChatReturn.Chat = TEXT("Stopping Serial/RS232 Service."); diff --git a/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp b/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp index 88f01760..1e2b0806 100644 --- a/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp @@ -1,6 +1,8 @@ #include "FRMConfigInitSubsystem.h" #include "Configuration/ConfigManager.h" #include "ConfigPropertyString.h" +#include "SessionSettingsManager.h" +#include "SMLOptionsLibrary.h" #include "Engine/Engine.h" DEFINE_LOG_CATEGORY_STATIC(LogFRMConfigInitSubsystem, Log, All); @@ -9,33 +11,28 @@ void UFRMConfigInitSubsystem::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); - UConfigManager* ConfigManager = GetGameInstance()->GetSubsystem(); - if (!ConfigManager) + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); + if (!SessionSettings) { - UE_LOG(LogFRMConfigInitSubsystem, Error, TEXT("ConfigManager missing.")); + UE_LOG(LogFRMConfigInitSubsystem, Error, TEXT("SessionSettingsManager missing.")); return; } + + FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); - ConfigManager->ReloadModConfigurations(); - - // Now config is loaded and safe to read/write - HttpConfig = FConfig_HTTPStruct::GetActiveConfig(this); - SerialConfig = FConfig_SerialStruct::GetActiveConfig(this); - FactoryConfig = FConfig_FactoryStruct::GetActiveConfig(this); - - if (HttpConfig.Authentication_Token.IsEmpty()) + if (AuthToken.IsEmpty()) { - HttpConfig.Authentication_Token = GenerateAuthToken(32); - SaveHttpAuthToken(ConfigManager); + AuthToken = GenerateAuthToken(32); + USMLOptionsLibrary::SetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken", AuthToken); - UE_LOG(LogFRMConfigInitSubsystem, Log, TEXT("Generated and saved new token: %s"), *HttpConfig.Authentication_Token); + UE_LOG(LogFRMConfigInitSubsystem, Log, TEXT("Generated and saved new token: %s"), *AuthToken); } else { UE_LOG(LogFRMConfigInitSubsystem, Log, TEXT("Token already exists.")); } - AuthenticationToken = HttpConfig.Authentication_Token; + AuthenticationToken = AuthToken; } void UFRMConfigInitSubsystem::SaveHttpAuthToken(UConfigManager* ConfigManager) diff --git a/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp b/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp new file mode 100644 index 00000000..8c9cd6bb --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp @@ -0,0 +1,159 @@ +#include "FRMGameInstanceModule.h" +#include "Settings/SMLOptionsLibrary.h" +#include "Logging/StructuredLog.h" + +#if UE_SERVER +#include "Controller/FGServerStateController.h" +#include "Controller/FGServerManagementController.h" +#endif + +DEFINE_LOG_CATEGORY(LogFRMGameInstanceModule); + +#define LOCTEXT_NAMESPACE "FicsitRemoteMonitoring" + +TArray SessionArray = { + // Debug Session Types + "FicsitRemoteMonitoring.Debug.JSONDebug", + + // General Mod Configuration + "FicsitRemoteMonitoring.General.SplineSampleDistance", + + // uWebsocket Configuration + "FicsitRemoteMonitoring.uWS.AuthenticationToken", + "FicsitRemoteMonitoring.uWS.Autostart", + "FicsitRemoteMonitoring.uWS.Port", + "FicsitRemoteMonitoring.uWS.PushCycle", + "FicsitRemoteMonitoring.uWS.Root", + + // Serial/COM Port Configuration + "FicsitRemoteMonitoring.Serial.AutoStart", + "FicsitRemoteMonitoring.Serial.BaudRate", + "FicsitRemoteMonitoring.Serial.Port", + "FicsitRemoteMonitoring.Serial.StackSize" + +}; + +// Credit: Jarno (the Archipelago guy) for this module code structure and the idea to subscribe to game events via the GameInstanceModule system +// See his Archipelago mod for reference: https://ficsit.app/mod/Archipelago + +UFRMGameInstanceModule::UFRMGameInstanceModule() +{ + UE_LOGFMT(LogFRMGameInstanceModule, Display, "UFRMGameInstanceModule::UFRMGameInstanceModule()"); +} + +void UFRMGameInstanceModule::DispatchLifecycleEvent(ELifecyclePhase phase) { + Super::DispatchLifecycleEvent(phase); + + if (phase == ELifecyclePhase::CONSTRUCTION && !WITH_EDITOR) { +#if UE_SERVER + SUBSCRIBE_METHOD(UFGServerStateController::Handler_GetServerOptions, [this](auto& func, const UFGServerStateController* self, TMap& OutServerOptions, TMap& OutPendingServerOptions) { + func(self, OutServerOptions, OutPendingServerOptions); + DediServer_GetOptions(OutServerOptions, OutPendingServerOptions); + }); + SUBSCRIBE_METHOD(UFGServerManagementController::Handler_ApplyServerOptions, [this](auto& func, const UFGServerManagementController* self, const TMap& UpdatedServerOptions) { + func(self, UpdatedServerOptions); + DediServer_ApplyOptions(UpdatedServerOptions); + }); +#endif + + SUBSCRIBE_METHOD(UFGUserSettingApplyType::VariantAsString, UFRMGameInstanceModule::VariantAsString); + SUBSCRIBE_METHOD(UFGUserSettingApplyType::StringAsVariant, UFRMGameInstanceModule::StringAsVariant); + } +} + +void UFRMGameInstanceModule::DediServer_GetOptions(TMap& OutServerOptions, TMap& OutPendingServerOptions) { + if (!IsRunningDedicatedServer()) + UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_GetOptions() called outside of dedicated server"); + + //handle conversion from session settings to server options + + UWorld* world = GetWorld(); + fgcheck(world); + + USessionSettingsManager* sessionSettings = world->GetSubsystem(); + fgcheck(sessionSettings); + + for (const FString& cvar : SessionArray) { + DediServer_CopySettingFromSessionSettings(sessionSettings, cvar, OutServerOptions, OutPendingServerOptions); + } +} + +void UFRMGameInstanceModule::DediServer_ApplyOptions(const TMap& UpdatedServerOptions) { + if (!IsRunningDedicatedServer()) + UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_ApplyOptions() called outside of dedicated server"); + + UWorld* world = GetWorld(); + fgcheck(world); + + USessionSettingsManager* sessionSettings = world->GetSubsystem(); + fgcheck(sessionSettings); + + for (const FString& cvar : SessionArray) { + DediServer_CopySettingToSessionSettings(sessionSettings, cvar, UpdatedServerOptions); + } +} + +void UFRMGameInstanceModule::DediServer_CopySettingFromSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, TMap& OutServerOptions, TMap& OutPendingServerOptions) { + if(!IsRunningDedicatedServer()) + UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_CopySettingFromSessionSettings() called outside of dedicated server"); + + UFGUserSettingApplyType* setting = sessionSettings->FindSessionSetting(cvar); + UFGUserSettingApplyType_RequireSessionRestart* applyType = Cast(setting); + + FString current = applyType->GetAppliedValue().GetValue(); + + OutServerOptions[cvar] = current; + + FVariant pendingVariant = applyType->GetPendingAppliedValue(); + if (!pendingVariant.IsEmpty()) { + FString pendingValue = pendingVariant.GetValue(); + + if (current != pendingValue) + { + if (OutPendingServerOptions.Contains(cvar)) + OutPendingServerOptions[cvar] = pendingValue; + else + OutPendingServerOptions.Add(cvar, pendingValue); + } + } + + if (!cvar.Contains("Password", ESearchCase::CaseSensitive)) { + TArray out_debugData; + applyType->GetDebugData(out_debugData); + UE_LOGFMT(LogFRMGameInstanceModule, Display, "UFRMGameInstanceModule::Server::GetServerOptions() applyType: {0}", out_debugData[0]); + } +} + +void UFRMGameInstanceModule::DediServer_CopySettingToSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, const TMap& UpdatedServerOptions) { + if (!IsRunningDedicatedServer()) + UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_CopySettingToSessionSettings() called outside of dedicated server"); + + if (UpdatedServerOptions.Contains(cvar)) { + UFGUserSettingApplyType* setting = sessionSettings->FindSessionSetting(cvar); + UFGUserSettingApplyType_RequireSessionRestart* applyType = Cast(setting); + + applyType->ForceSetPendingAppliedValue(UpdatedServerOptions[cvar]); + //the above line does not correctly apply the value of session restart so for now we just hard set the current value + applyType->ForceSetValue(UpdatedServerOptions[cvar], false); + + if (!cvar.Contains("Password", ESearchCase::CaseSensitive)) { + TArray out_debugData; + applyType->GetDebugData(out_debugData); + UE_LOGFMT(LogFRMGameInstanceModule, Log, "UFRMGameInstanceModule::Server::ApplyServerOptions() applyType: {0}", out_debugData[0]); + } + } +} + +void UFRMGameInstanceModule::VariantAsString(TCallScope& Scope, const FVariant& variant) { + if (variant.GetType() == EVariantTypes::String) + Scope.Override(variant.GetValue()); +} + +void UFRMGameInstanceModule::StringAsVariant(TCallScope& Scope, const FString& string, EVariantTypes variantType, FVariant& outVariant) { + if (variantType == EVariantTypes::String) { + outVariant = FVariant(string); + Scope.Override(true); + } +} + +#undef LOCTEXT_NAMESPACE diff --git a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp index 51e840f3..68a87da8 100644 --- a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp @@ -22,6 +22,7 @@ #include "Research.h" #include "Resources.h" #include "Session.h" +#include "SMLOptionsLibrary.h" #include "StructuredLog.h" #include "SubsystemActorManager.h" #include "Support.h" @@ -106,16 +107,26 @@ void AFicsitRemoteMonitoring::StartWebSocketPushDataLoop() { if (bHasRunningPushDataLoop) return; - FConfig_HTTPStruct HttpConfig = FConfig_HTTPStruct::GetActiveConfig(GetWorld()); + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - Async(EAsyncExecution::Thread, [this, HttpConfig]() + Async(EAsyncExecution::Thread, [this, SessionSettings]() { bHasRunningPushDataLoop = true; UE_LOGFMT(LogHttpServer, Log, "Starting PushUpdatedData loop"); while (SocketRunning && !bShouldStop) { + FString WSPushCycle = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.PushCycle").TrimStartAndEnd(); + + if (!WSPushCycle.IsNumeric()) { + UE_LOGFMT(LogHttpServer, Log, "Invalid Push Cycle Config. Push Cycle must be a number."); + bShouldStop = true; + return; + } + + int32 PushCycle = FCString::Atoi(*WSPushCycle); + PushUpdatedData(); - FPlatformProcess::Sleep(HttpConfig.WebSocketPushCycle); + FPlatformProcess::Sleep(PushCycle); } UE_LOGFMT(LogHttpServer, Log, "Stopped PushUpdatedData loop"); bHasRunningPushDataLoop = false; @@ -192,22 +203,32 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) try { auto app = uWS::App(); auto World = GetWorld(); - auto config = FConfig_HTTPStruct::GetActiveConfig(World); + + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); + FString HttpPort = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Port").TrimStartAndEnd(); + FString Root = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Root").TrimStartAndEnd(); + FString AuthenticationToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); + + if (!HttpPort.IsNumeric()) { + + UE_LOG(LogHttpServer, Log, TEXT("Invalid Port Config. Port must be a number.")); + return; + } + + int32 port = FCString::Atoi(*HttpPort); FString ModPath = FPaths::ProjectModsDir() + "FicsitRemoteMonitoring/"; FString IconsPath = ModPath + "Icons"; FString UIPath; - if (config.Web_Root.IsEmpty()) { + if (Root.IsEmpty()) { UIPath = ModPath + "www"; } else { - UIPath = config.Web_Root; + UIPath = Root; }; - int port = config.HTTP_Port; - // Define WebSocket behavior uWS::App::WebSocketBehavior wsBehavior; @@ -279,7 +300,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) UFRM_RequestLibrary::SendErrorJson(res, "404 Not Found", ""); }); - app.get("/api/:APIEndpoint", [this, World, config](auto* res, auto* req) { + app.get("/api/:APIEndpoint", [this, World, AuthenticationToken](auto* res, auto* req) { std::string url(req->getParameter("APIEndpoint")); FString Endpoint = FString(url.c_str()); @@ -287,7 +308,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) //UE_LOGFMT(LogHttpServer, Log, "Request URL: {0}", Endpoint); FRequestData RequestData; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, config.Authentication_Token); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); HandleApiRequest(World, res, req, Endpoint, RequestData); }); @@ -299,12 +320,12 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) res->end(); }); - app.post("/*", [this, World, config](auto* res, uWS::HttpRequest* req) + app.post("/*", [this, World, AuthenticationToken](auto* res, uWS::HttpRequest* req) { const std::string URL(req->getUrl().begin(), req->getUrl().end()); FString RelativePath = FString(URL.c_str()).Mid(1); - res->onData([this, res, req, World, RelativePath, config](const std::string_view data, bool) + res->onData([this, res, req, World, RelativePath, AuthenticationToken](const std::string_view data, bool) { try { @@ -320,7 +341,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) FRequestData RequestData; RequestData.Method = "POST"; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, config.Authentication_Token); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); if (JsonValue->Type == EJson::Array) { @@ -348,7 +369,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) res->onAborted([]() {}); }); - app.get("/*", [this, UIPath, World, config](auto* res, uWS::HttpRequest* req) { + app.get("/*", [this, UIPath, World, AuthenticationToken](auto* res, uWS::HttpRequest* req) { if (!res) return; std::string url(req->getUrl().begin(), req->getUrl().end()); @@ -376,7 +397,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) } else { FRequestData RequestData; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, config.Authentication_Token); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); HandleApiRequest(World, res, req, RelativePath, RequestData); } }); @@ -819,7 +840,6 @@ FString AFicsitRemoteMonitoring::FlavorTextRandomizer(EFlavorType FlavorType) { auto config = FConfig_DiscITStruct::GetActiveConfig(World); - JsonPath = config.OutageJSON; if (config.OutageJSON.IsEmpty()) { diff --git a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp index 2543ba91..5502f53e 100644 --- a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp +++ b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp @@ -19,6 +19,7 @@ #include "FicsitRemoteMonitoring.h" #include "FicsitRemoteMonitoringModule.h" #include "Research.h" +#include "SMLOptionsLibrary.h" #include "StructuredLog.h" #include "Components/SplineComponent.h" #include "GameFramework/PlayerState.h" @@ -299,10 +300,11 @@ void URemoteMonitoringLibrary::GetOverclockingItemsFromInventory(const UFGInvent FString URemoteMonitoringLibrary::APItoJSON(TArray> JSONArray, UObject* WorldContext) { - FString Write; - auto config = FConfig_FactoryStruct::GetActiveConfig(WorldContext); + FString Write{}; - if (config.JSONDebugMode) { + USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); + + if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.JSONDebug")) { const TSharedRef>> JsonWriter = TJsonWriterFactory>::Create(&Write); FJsonSerializer::Serialize(JSONArray, JsonWriter); } else { diff --git a/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h b/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h new file mode 100644 index 00000000..562ea94a --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h @@ -0,0 +1,40 @@ +#pragma once + +#include "CoreMinimal.h" + +#include "FGBlueprintFunctionLibrary.h" + +#include "Module/GameInstanceModule.h" +#include "Patching/NativeHookManager.h" +#include "SessionSettings/SessionSettingsManager.h" + +#include "Misc/Variant.h" +#include "Settings/FGUserSettingApplyType.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogFRMGameInstanceModule, Log, All); + +#include "FRMGameInstanceModule.generated.h" + +/** + * Blueprint implemented Mod Module +*/ +UCLASS(Abstract, Blueprintable) +class FICSITREMOTEMONITORING_API UFRMGameInstanceModule : public UGameInstanceModule +{ + GENERATED_BODY() + +public: + UFRMGameInstanceModule(); + + virtual void DispatchLifecycleEvent(ELifecyclePhase Phase) override; + +private: + void DediServer_GetOptions(TMap& OutServerOptions, TMap& OutPendingServerOptions); + void DediServer_ApplyOptions(const TMap& UpdatedServerOptions); + + void DediServer_CopySettingFromSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, TMap& OutServerOptions, TMap& OutPendingServerOptions); + void DediServer_CopySettingToSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, const TMap& UpdatedServerOptions); + + static void VariantAsString(TCallScope& Scope, const FVariant& variant); + static void StringAsVariant(TCallScope& Scope, const FString& string, EVariantTypes variantType, FVariant& outVariant); +}; diff --git a/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h b/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h index 7e095d31..86eea4ab 100644 --- a/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h +++ b/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h @@ -164,6 +164,9 @@ class FICSITREMOTEMONITORING_API AFicsitRemoteMonitoring : public AModSubsystem UFUNCTION(BlueprintImplementableEvent, Category = "Ficsit Remote Monitoring") void InitSerialDevice(); + UFUNCTION(BlueprintImplementableEvent, Category = "Ficsit Remote Monitoring") + void StopSerialDevice(); + void HandleApiRequest(UObject* World, uWS::HttpResponse* res, uWS::HttpRequest* req, FString Endpoint, FRequestData RequestData); void InitAPIRegistry(); diff --git a/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp b/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp index c1a4be0a..1b6a27d1 100644 --- a/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp +++ b/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp @@ -2,7 +2,7 @@ #include "FGServerAPIManager.h" #include "FGServerSubsystem.h" -#include "../../FicsitRemoteMonitoring/Public/Configs/Config_HTTPStruct.h" +#include "SMLOptionsLibrary.h" #include "../../FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h" class UFGServerSubsystem; @@ -15,9 +15,13 @@ void AFicsitRemoteMonitoringServer::BeginPlay() const auto World = this->GetWorld(); this->Controller = NewObject(); this->Controller->World = World; + AFicsitRemoteMonitoring* ModSubsystem = AFicsitRemoteMonitoring::Get(World); this->Controller->ModSubsystem = ModSubsystem; - this->Controller->AuthToken = FConfig_HTTPStruct::GetActiveConfig(World).Authentication_Token; + + USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); + FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); + this->Controller->AuthToken = AuthToken; if (World == nullptr) return; From dc297e3f975fa81b5bcefd4eed6725bfac046785 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 10 Mar 2026 10:38:51 -0400 Subject: [PATCH 2/4] Comm Engine Autostart --- .../FicsitRemoteMonitoring_BP.uasset | Bin 316876 -> 318862 bytes .../Private/FicsitRemoteMonitoring.cpp | 20 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Content/Subsystems/FicsitRemoteMonitoring_BP.uasset b/Content/Subsystems/FicsitRemoteMonitoring_BP.uasset index 078d1d9700f06074092e32d872becf04cdf4dd38..269dc2d5aeb131ef2d5d21ac55faadd2c9d741f9 100644 GIT binary patch delta 47041 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 delta 48884 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 Dxg%fJ diff --git a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp index 68a87da8..97c211c7 100644 --- a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp @@ -65,33 +65,27 @@ void AFicsitRemoteMonitoring::BeginPlay() InitAPIRegistry(); // Get our config subsystem - auto ConfigSubsystem = GetGameInstance()->GetSubsystem(); - if (ConfigSubsystem) + USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); + if (SessionSettings) { SetAuthToken(ConfigSubsystem->GetAuthenticationToken()); } - if (!ConfigSubsystem) + if (!SessionSettings) { - UE_LOG(LogTemp, Error, TEXT("[AFicsitRemoteMonitoring] Config subsystem missing!")); + UE_LOG(LogTemp, Error, TEXT("[AFicsitRemoteMonitoring] SessionSettings missing!")); return; } - // Use cached config values from the subsystem - const auto& HttpConfig = ConfigSubsystem->GetHttpConfig(); - const auto& SerialConfig = ConfigSubsystem->GetSerialConfig(); - const auto& FactoryConfig = ConfigSubsystem->GetFactoryConfig(); - - // Save locally - JSONDebugMode = FactoryConfig.JSONDebugMode; + USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); // Start services based on config - if (HttpConfig.Web_Autostart) + if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.Autostart") { StartWebSocketServer(); } - if (SerialConfig.COM_Autostart) + if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.Serial.Autostart") { InitSerialDevice(); } From 073eeabd13d5e2c657cad6ad4f15f1aecf6a6d16 Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Tue, 10 Mar 2026 11:27:19 -0400 Subject: [PATCH 3/4] fixed compiling errors and things forgotten --- .../Private/FicsitRemoteMonitoring.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp index 97c211c7..e70db1b2 100644 --- a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp @@ -65,11 +65,7 @@ void AFicsitRemoteMonitoring::BeginPlay() InitAPIRegistry(); // Get our config subsystem - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - if (SessionSettings) - { - SetAuthToken(ConfigSubsystem->GetAuthenticationToken()); - } + USessionSettingsManager* SessionSettings = this->GetWorld()->GetSubsystem(); if (!SessionSettings) { @@ -77,21 +73,21 @@ void AFicsitRemoteMonitoring::BeginPlay() return; } - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - // Start services based on config - if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.Autostart") + if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.Autostart")) { StartWebSocketServer(); } - if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.Serial.Autostart") + if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.Serial.Autostart")) { InitSerialDevice(); } + FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); + // Store token for use in auth checks - SetAuthToken(ConfigSubsystem->GetAuthenticationToken()); + SetAuthToken(AuthToken); // Register the callback to ensure WebSocket is stopped on crash/exit FCoreDelegates::OnExit.AddUObject(this, &AFicsitRemoteMonitoring::StopWebSocketServer); From 7713641efb3eab9d856319ace919deff5e6d5d2e Mon Sep 17 00:00:00 2001 From: Chris Wall Date: Fri, 13 Mar 2026 01:13:35 -0400 Subject: [PATCH 4/4] WIP: Works on Client Build, cannot configure on Server Build --- Content/FRM_Icon.uasset | Bin 0 -> 177034 bytes Content/GameInstance.uasset | Bin 9109 -> 6763 bytes .../Client/FicsitRemoteMonitoring.uasset | Bin 0 -> 6490 bytes .../FicsitRemoteMonitoring_Debug.uasset | Bin 0 -> 5791 bytes .../FicsitRemoteMonitoring_DiscIT.uasset | Bin 0 -> 5839 bytes .../FicsitRemoteMonitoring_General.uasset | Bin 0 -> 5746 bytes .../FicsitRemoteMonitoring_Serial.uasset | Bin 0 -> 5805 bytes .../Client/FicsitRemoteMonitoring_uWS.uasset | Bin 0 -> 5774 bytes .../Categories/FicsitRemoteMonitoring.uasset | Bin 6112 -> 0 bytes .../FicsitRemoteMonitoring_Debug.uasset | Bin 5772 -> 0 bytes .../FicsitRemoteMonitoring_DiscIT.uasset | Bin 5818 -> 0 bytes .../FicsitRemoteMonitoring_General.uasset | Bin 9362 -> 5734 bytes .../FicsitRemoteMonitoring_Serial.uasset | Bin 5784 -> 0 bytes .../FicsitRemoteMonitoring_uWS.uasset | Bin 5753 -> 0 bytes ...FicsitRemoteMonitoring_Server_Debug.uasset | Bin 0 -> 5909 bytes ...icsitRemoteMonitoring_Server_DiscIT.uasset | Bin 0 -> 5957 bytes ...csitRemoteMonitoring_Server_General.uasset | Bin 0 -> 5937 bytes ...icsitRemoteMonitoring_Server_Serial.uasset | Bin 0 -> 5923 bytes .../FicsitRemoteMonitoring_Server_uWS.uasset | Bin 0 -> 5892 bytes .../DediUI/Debug/FRM_JSONDebug.uasset | Bin 3961 -> 3946 bytes .../General/FRM_SplineSampleSetting.uasset | Bin 4213 -> 4202 bytes .../DediUI/Serial/FRM_Baud_Rate.uasset | Bin 4203 -> 4093 bytes .../DediUI/Serial/FRM_COM_Autostart.uasset | Bin 3547 -> 3393 bytes .../DediUI/Serial/FRM_COM_Port.uasset | Bin 3654 -> 3544 bytes .../DediUI/Serial/FRM_SerialStackSize.uasset | Bin 4103 -> 4064 bytes .../FRM_Authentication_Token.uasset | Bin 4179 -> 4147 bytes .../DediUI/uWebSockets/FRM_HTTP_Port.uasset | Bin 3629 -> 3511 bytes .../uWebSockets/FRM_WebSocketPushCycle.uasset | Bin 3619 -> 3580 bytes .../uWebSockets/FRM_Web_Autostart.uasset | Bin 3685 -> 3405 bytes .../DediUI/uWebSockets/FRM_Web_Root.uasset | Bin 4298 -> 4068 bytes .../FicsitRemoteMonitoring_Base.uasset | Bin 2353 -> 2360 bytes .../Session/Debug/FRM_JSONDebug.uasset | Bin 3694 -> 3923 bytes .../General/FRM_SplineSampleSetting.uasset | Bin 3945 -> 4174 bytes .../Session/Serial/FRM_Baud_Rate.uasset | Bin 4079 -> 4285 bytes .../Session/Serial/FRM_COM_Autostart.uasset | Bin 3549 -> 3583 bytes .../Session/Serial/FRM_COM_Port.uasset | Bin 3528 -> 3734 bytes .../Session/Serial/FRM_SerialStackSize.uasset | Bin 3939 -> 4256 bytes .../FRM_Authentication_Token.uasset | Bin 4183 -> 4339 bytes .../Session/uWebSockets/FRM_HTTP_Port.uasset | Bin 3503 -> 3701 bytes .../uWebSockets/FRM_WebSocketPushCycle.uasset | Bin 3453 -> 3770 bytes .../uWebSockets/FRM_Web_Autostart.uasset | Bin 3559 -> 3595 bytes .../Session/uWebSockets/FRM_Web_Root.uasset | Bin 4134 -> 4260 bytes .../FicsitRemoteMonitoring.build.cs | 2 + .../Private/Commands/multi.cpp | 27 +- .../Private/Endpoints/Factory/Logistics.cpp | 7 +- .../Private/Endpoints/Travel/Hypertubes.cpp | 3 +- .../Private/Endpoints/Travel/Trains.cpp | 4 +- .../Private/Endpoints/World/Communication.cpp | 7 +- .../Private/FRMConfigInitSubsystem.cpp | 33 +- .../Private/FRMGameInstanceModule.cpp | 159 ---------- .../Private/FicsitRemoteMonitoring.cpp | 80 ++--- .../Private/Libraries/FRMConfigManager.cpp | 289 ++++++++++++++++++ .../Private/Libraries/Validation.cpp | 47 +++ .../Private/RemoteMonitoringLibrary.cpp | 4 +- .../Public/FRMConfigInitSubsystem.h | 1 - .../Public/FRMGameInstanceModule.h | 40 --- .../Public/FicsitRemoteMonitoringModule.h | 1 + .../Public/Libraries/FRMConfigManager.h | 203 ++++++++++++ .../Public/Libraries/Validation.h | 11 + .../Public/RemoteMonitoringLibrary.h | 2 +- .../FicsitRemoteMonitoringServer.build.cs | 5 +- .../Private/FicsitRemoteMonitoringServer.cpp | 6 +- 62 files changed, 624 insertions(+), 307 deletions(-) create mode 100644 Content/FRM_Icon.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_Debug.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_DiscIT.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_General.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_Serial.uasset create mode 100644 Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_uWS.uasset delete mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring.uasset delete mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset delete mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_DiscIT.uasset delete mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_Serial.uasset delete mode 100644 Content/SessionSettings/Categories/FicsitRemoteMonitoring_uWS.uasset create mode 100644 Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Debug.uasset create mode 100644 Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_DiscIT.uasset create mode 100644 Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_General.uasset create mode 100644 Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Serial.uasset create mode 100644 Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_uWS.uasset delete mode 100644 Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp create mode 100644 Source/FicsitRemoteMonitoring/Private/Libraries/FRMConfigManager.cpp create mode 100644 Source/FicsitRemoteMonitoring/Private/Libraries/Validation.cpp delete mode 100644 Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h create mode 100644 Source/FicsitRemoteMonitoring/Public/Libraries/FRMConfigManager.h create mode 100644 Source/FicsitRemoteMonitoring/Public/Libraries/Validation.h diff --git a/Content/FRM_Icon.uasset b/Content/FRM_Icon.uasset new file mode 100644 index 0000000000000000000000000000000000000000..9dba1b3b947ab1979273a8ff8d8e104cb4f49be0 GIT binary patch literal 177034 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

4!>jjo%c2NI!*fy=UxJw+Q5O2bF}ewNVv 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

O2ho1802wuz;V`7|O=fg@GjB2Hp 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%0D6s4+o89X~wTt2d78k1Dz| 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 Jbt(3T{|9qy2zmej literal 0 HcmV?d00001 diff --git a/Content/GameInstance.uasset b/Content/GameInstance.uasset index fc760bf2d6a27e82f3f88ff223393e60e0798c5b..98f5cde7628d78c5f1e05e39c7b1221605650fbe 100644 GIT binary patch delta 1305 zcmbR0{@P^19;PW`6Zh%!*)T9LykcZv03wFl?34AB)j=W*zt|ZV*no5vHv@whl)s7> zqU;cmJ_W?jfLNo;ZJMjre*dlsotu{GY95^&$0)&QGr646UCDuufx%n~WEcYc2ZAX; z^AvzW)>4}vFt##nu4Qp%oE*d%H2E~=naTUO6c}YD@8^=>_RUWz%}Hf2DogR3e2>e< zh##oMJux@cGq1QLF)uka-kBlhs$-cjnlMyb@%EVF$=N)~lV9-2*Q){5fPfZ+V)z7f zg$|T00;NF|y1I`*b-F~T`v6p@hg)4e+~W5@h5A?&szSxIq4YbTI%6W#y#=Z>C#bHT zfdQn@f}lbMhBrWUnnbFDg(h+cqI(2no{2ELwbz$adhuKg8IyEPWw>QFH=DE%6! z&Jc?_n0b~^IS{1)Wn*zR6NBYs34VD_xVFg-D7*|5-UJlh4iw%46ds2FvY7?~@{^wn zs{r%gWL^<3F;l2}IDvEkl-(&Y`J#y2ar%m69` z@?kWT9V-cz4i;4rvw{jS0qJ5WdxzxYUQsVGP`H9JJ;-1lsFb!8Sf{X9G1EET$sJ;b zY`1`UyhUvDez7t}Mytt+a;hxBzCL=B6XZlDcS?w%32pu?q05RYmWs-im@F%ABM2%` z&VQ8!TMx2XeDZw-iOFs9ii~oTSI9ev$v~Y0Rv-lB$V~nxZy*ShVu6ZE0|QD%QUaz1 zN((?~`N@SM5|eurOc`atR@_o>o@}SUFG5La`_~a`}2Lb$! B(6ayl delta 2815 zcmb7`eM}rh6u@T@xWXN971+B2+AB~jw$KCG@*zb&j`rZ_!Ep;|493fHj_nED5q1y3 znADh>XtZg`C^7z_HjT!lCPuL)8r#G_Y)mvEO{BFJYd@@|r7hO4KWtKbvp2`bG27sT zcW>tX-g`6qW_H-w?Qgn{e3dX@A3Nnp??wpS6cBr1y&k3%AlYr$yh+Wd=p$*s($_E=R zoVX;soM1IWU&4wK42LAFs=?4c1({!6J3N6Cor2Ij_H}M~9Com=qZ#)`_BnR@Jbt&- z(XNe9PGt197lP{af?PO+hva@OOd9MDhOi_L4EAF-IZ~BxI(I>W3cUmp9tyJfCOPu7 z-zTdWS&EMxYK5rERYW;EJpRUr8dg+!NJTGv{zbzBpK{53G}0S}p!1`rUuuKts#h^x zG+t8WK%W$R9;2erxtwl@ZPJU4?8UuOIM9bxMXM65bw3WN!GNs7Ci%O^9j2B#X zLzb%5W@+i_@_r`>^xut4|;65m30PFA4+EqiwDg0O5$G+GwbpLl#JU?!t1Fe zTsR<89>o+(vRL_%6#utiJ)rq6zB8fsoe5biL;Pu(Zn|~V8e^Q-<#5lM+St05?^DgS z@1|qxTG#@^;7pyRh~)!oe0h(Z*!(VB9CU%SY`MNO^Tio3cF6;{H3V-=D1iM=^yF0I zFc~ofa_H2OXV3Btg?sDmdUC;F&#nMWTUAt{Ki~qYA)nYXSCG3v9^;bVfz)!z9FUzF zDQEesnZ637flICc>Ch!!F1ZXbmAa%#m(+8~CCKLCl3##G8rjC4!^1RXC4Pl*e#dqEisJn4>G*Am^J_Em=Y5p=aaXiimu%4`CAy?kmu%G~ z4qZ~FOUiXgg)Z5qOLk~vJKLu&rtiRxySU^wkXA0a1;oiEvp|};T{24NjBTe9G{$Wpd;9a~@`(|P2sG0#T-kI)vQ z^wW>F4M44A!m>kHPi|OxAcxIXOa`pSwccoZZq!YCeA+Ez<7}pp5jsD@W=(@!0Qm{z W9LPnG^B_NioCTQz`GFj^P5%eF6yI?G diff --git a/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring.uasset b/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring.uasset new file mode 100644 index 0000000000000000000000000000000000000000..7835371301c3c78641e4adbdba817ec1bcde5e05 GIT binary patch literal 6490 zcmcH;3v5)!aSqHc*pyHLhL-S40Q0fWU+h3W=leJYd_H_OO-qP*zFXTbxx06M@15b2 zkeY;2+9>}>rJ_xRTa<_x)l#4!p(aJ4YT8HziWH0z@nPT>a>_@YPuS0D+)5hP_j>5@1uvBs8bFuVQc&oi--sP_4-g58qYPY+} zU0PmQ<@P##PLHR`i!2t5!Q#*afJs>Hz|K1-T7r78+>hUJ{N_$t*?TU(&$aXOgRbpe zuD-YP*{b5E)BflD-|&CX{a2L+COM?Y7_|Q=@L(+$za>k`3rh=2mbrsLP661vwA(R| zf{YyI^_{$xD)%76f*BT0{^BC{lNIM9VzG^OQ>?o5@RLC@h)dU%WI)&AOgEEI+j~y^ z3SwJak%+d*!y?SYHG}?(lm78FLa$+MN+{`PEZnFC5_%g8KEfgmtkr<$_C2_QN>$z!&Z00=2QUq&+7qR!v3R8pSX(XJJ6@?W2y<*io@7lC>c;&-_1(>mWl!J*p9p zC`rE(Ww80#pBHe}Iu=U=bQQM{F5Ha2?>|AK`!$^CrP066Bb|jQ?pCdo!z2{D*rCU=nL0YyjqT9eIxf6sc7*T4)dp@*0y7an_X#(~L* z4l122yiR4C>RVe4X2Rp|^m$VFZ)sZ871a_k6Pl+z^IKYuV5pr%73e?w^d{VS5R9N% ztM!D@4*HzKTWO%6)@s_;@!Pvk@8)PzPvFwZ`8eT6SI9h#Y;ziU^e*!t@iw(Ey^R(p zfKxSK=KStb3<0nXeM8erJkaEfOrR)oji^)PYp84Hi}0(iu%Eo9C>YY!xLK5TaFPxm zoqpUyt18KEO=nHQK%dnvyN7gZ!NI86aT__JXs5dU zcp)>S`FR$Kr0udZ&5(EP#bEk!c#iINaqjjOEW6(~)K)!z?U+D<>%0|F< z3FXmwOEA>9#8+Uk4a>J|1bqKOdCn|+3k6Qnh;K<2K53V7L8F3BI)ZHTu=Cwvu?@>7 z#~4oDf)UD-bF<5neU}Rv|H1i|WRZ6T@dC{YyIY;2bOM1+dkKURXo*U-QB;O3Vz`XB z&u#c((Tg@nK-B+4yKe}P<7Jcog-tf`6$v@C!M2Hd0R_epKsNc9&1Jw+(W=67tWa#< z4aon}ray_U5b|kUL)71(z$$=-l=hG~S!UB;(*DEx`jGsrb z^F=yn5NOmP#vwVGr&MA31fpw=Hx*-;6-TR(mvtbA^ymV#5oytixvB%-i7X#ak92)A zmU2iov4w`u`T)DG=6a z;Y5V-$ABSDLOP8t&IX1zY^usI(+HHVC97+!@weDtQ%w%>RyCO`w}J2O>x&iQFY4#AQy=0_Wq>U z*9nO*Xik*9)4T`<&xzcPV8nAe8GF5U!hzz|&zG)yrf21Q7wme_rX!fce*up)JJ5A^ z{cz9L8@St6mzTR;UT0}piMz7cRq1mU7kf%wRjy)ZxzAJWaX~ts&9R=^=cM1-K_vaz zeBhmG+WiD_!t&BgPlH*3h9Veb*iX=~a`v($MthwMPamxuJyQ|Trp2c`#v54)grwL; sFc-h!j0Q*We@TAu>7K5_6-Q6daMBq_072)O%C$Mad#k`{H97x(0m@M+jQ{`u literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_Debug.uasset b/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_Debug.uasset new file mode 100644 index 0000000000000000000000000000000000000000..8cf439a5397accdcda257901fc4eb07f87f59f8e GIT binary patch literal 5791 zcmcH-3v3+KagLl5hr~$;2??etkN}S3`0Ts$7f_q~8Yi*u;L@H8BQZ{Ez?nb~*b@eMDXpP8B2J`dpf>i|B+7XM)Z{_Z{UQ0s;JPR;-4 zB>eo5u?=^*5w~~sn(dRZ;e#iR-*n&)Z+%!LBks}P?-pMP#7=*-ZS#Tkzc~Esam1bS zy)#`E`{u2OA31h#YV)O*>k;=w?c%XL;px!H70*7W-nM4dornuQ^ujyQuGjB)`QY-& z{Ho!T4Tw8CI(_O)@cDC#{_LF!ycYGWN8I;s1b6`3hNzfSMXiUWWsP;o8BvoJF_UUY zFjW=hOoC||4%LQ`ps^H^72f|1$=&gFx=|(>df@0z@NVoU@^8d`9|6>LJhX`3*pcG%8uldqiwNY zrQH1&PFI{5pRE2`r1ra8p7K@vBXX$^{^2Yo_Y1l_mI4xlw(=+ zj@FSAhvC?Q>ONYvfKB98jiv8r3ONoQ)fUzjP3p~O87#hG-^nVPB+F7kvt{n-C+U1f zGAS{`;IJ!vnr22NSb;x3-f5o_6_WV==R3$FA3PZQh&)?Z1y;2Ct5(}Fv(7^83)y;nRlzW?HnHp3TX7U- zBSKEn1_z@ZeJWFUMB(uy5AQSWJqkz`TiJkQ#FfDijQrrObr=^QGHmSHEgu@V!5SOR z9NglAUmp2R)gmH{qsI;2f&H!ldPmD^B2I08nGRC{2n(73r}i9rjt(352itPiMZ4gK7SxU>RxY!~g=sHt{2{v;@dTeY8u&McoVC19 zJ~d%B-zUgd!--COoIxdIK_ayKC(Lp|E0~A%FKQAFn7PyV~ z+Od6+_xo4!jzd#U{(on!xq-`|byeO!Z<9}ZH0{C3g{GYR0`Uqvv~F?Wb&N`N$Uj$P zrq{wDVzr`(=lLlk4II~`SED$cc&t=G5xKPb&@u7eFU2E+-LjGvB%lQgv#fNDSe?|F z&dLhb8U>1~7t`x&fxnM&W5qRV9E$)dc$EwOUDIm)OkDfM$XD-FCpr3J1l0c zxlA>Dm1VSNZlBfYwXD6QiP$u@rGJl}k!#Go*s{E*Y$~jQil^D?OCnN0)h!W~gp>*t zpPHJQ+nU;2bW*2EnL3t{^7>apuaaXrPgD%*DSQnEih20v)8DJ8CbgCN)49g(F zltZ$azH3Xi9rqPji$P#5+ztIO02{IA zx-uNu^poSk_v=R*T=s7Yd*5FB7YV9#!zJ7`eU=i~Yg+q!(w`TGrF)`+*PK|oCn{qJ zu6R#RH~i^GOFMT5_bokoZzAgHvFky%Fa%~P-fs-~lfF9oovs%Lj7!MINEGiMy-jVQ zK%_b9^S64#O^t2gptn8h4Yoyf=NR{x{M6`m04-GTCBU9dcIE7S@-h9$E_8cEKrLP@ zF?~>$Ku8Kq1h?bQX)kaDubRL8$^Jc_d)|DTmNUQ2NdUq4iMDO--@Z}XXbg4!{{a!# By?g)w literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_DiscIT.uasset b/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_DiscIT.uasset new file mode 100644 index 0000000000000000000000000000000000000000..dd7823a58f2e284a6c875ae5897ad352ccf02596 GIT binary patch literal 5839 zcmcIoeQ;D)6+bBfLLoqrLZC(hwB!TGcS2GaWwVpz*clxoSZ(kiBAKyKT=*~Nc-shJ8X)ZroPVd@uZQIzKe;=Zs z9vCcIm&v%pIk~$Jwe}uA|N63HfBx;e*&5>>`O|*&N3Pb3@3l1@EBM)|Uk)*Dto)79 z?A9k%ojP##_;AyW>N^?tIrIA2gPu|Mg{99tXXNEBzmIWsyN+d{K7C) zE$kPj$wQ;Wt(c;pNrJmURfNr(2zGl^Bhc8vnlouV|IT9{0CvnFTFq@$wX3SSl%djF z<#CmJYpbi>Rjy5&DoQ<-^`(^+7BhZk^HY;Ww18U(=U~MQ8@R=@ji2wG%WHZ0v9(P{ zkJF{Ee)H_2m(I>z*@;;bSbxkgMd(4HW9R4*bKd$Cp^jKY(1N?3y^swdO$#P0Tbw!i zBo1hOxL*wmI+fwM2uW{HQ_KX@wI80p0rML~Sm=Bjdfh?AFz9gBjt+JUHRwuYz_M%j z(LW5q>(;>S`)B}eZ44(hjl5pn1RFwpRw6+q)}n+2?R)yig_tzdEW%NruJT!9pRM@k z$#c-vqOo09X8k4`7PR&}BmzlwuD5>jZZ4yJN??!DFScs|C8$2Ez`4+DM3jJ_C1&h# z*x^%jKD=?$bN)WE6U+7o21H1q@z#*e|{(!DV%#y^`Ti&O4-ujAXse|m+bkQ027F})J_*qzN zi^{z|y!C61P7$vX;0O?Fz?NLv(fS^?HZcn=t*yw;abhMMhQcF}jr^`s+`s1Deb21o zkw^3?(V*Gg?QQ5Zgf3%>j3_bshcMqROktZcB+1Cq?WW5sc6m86Pm){iFXOx zYQsdn51B7t64UV&%z*C$*7xZd^5LZfOgAs|Auj-?$_z*b(HVu3@bAYMz z;h@=olMG15XZtiA-^#eUwEAqDo%*h`-BR3Y?vn!?-%GNOG-Cr&8y+XvV^)=-3q02t z_g@EoofO3R^vVA72n5r>boxJX=my_fsR!r#knE48(J$GERZX&AmJv1!<;h+xx4)MC zfxBfVO*57Lk0;DoBz0h3L-q?C=^bmd{UOPTW-9#&;tV^OH#PRAk4vR2FkN)cW1Z7R zHjY_aSjTteIfD)9XT{r*npBFD2?JqyauH%-d>vo#)pxgOdPoTpW=u#Wvo>QbQe!Bh z>0ELoD27#37ZehO-!!;hCn_bp)rqs=5r$Rzpuz>fx&$#%Qh<^w=BPA5L|C;v;SDPN1|dpS zR#w$i)>d1jMg#e}H5`mt_lFKWDl8taT4yElTn-nr`2EM<2{sdLmh~IQ;dfqQoFjV; z^blzzsEL2w6rv&Oqd|@?z(%QsdbsVO0md3Eu|P_-@hHN4z($$3kIb~xxJ9>a!yIYD zgA|ZfO~%-MxYhOAnp@ciVV*66CSx+CJ;}KiO3ZfljA_Y5se^h+Wes80ltH`DQRnjx_rN+r8ErS+IS}UKdaJE&HYp=Ba9kEv;bGNJIcBW?V?l}wGPdBgfXls*(ryutq8f;{43 zv(_683hOeSKIwkfJCnlWy>;aXke%Yg?y0?3d-?#g?DLS=ZlbMQo%TEXI0ks&I(+N`pylsS!Wv9T020v)u$rHA%cax&Y5Ii^ fM-CQmK64J!+1Gd|01Tb4Y0LcmuL?`!LyP}^0z%Mc literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_General.uasset b/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_General.uasset new file mode 100644 index 0000000000000000000000000000000000000000..a209c58e59baeb06121b9d1612c2353096fc98e0 GIT binary patch literal 5746 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 Cy~is6 literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_uWS.uasset b/Content/SessionSettings/Categories/Client/FicsitRemoteMonitoring_uWS.uasset new file mode 100644 index 0000000000000000000000000000000000000000..b8cce39141ee26fd039aac69859f10463bff4a83 GIT binary patch literal 5774 zcmcH-ZERG>aW0q-2MmM~a7f(*@?p$}Kh9@khbZa!J{$u+A3i%DrN%tpt?d`y-8;Yc z&i2tdA_=u<8c`*w)G8#Xvg$MX=yKO02c zr2EuFN!vH?IQqoNLt~q+*58b{2aPKycl#%NXO=$qf_`V&@_P{1w0-}nVC%8FUp=&B zPkMRmOcmlT^iNElZ~D%~`R~?@dEX3Hu14JG7XUi3tP09eT{hZTTs2s$nve}ulM{Va z5vJ?1nusvNz@}d1lML2}B!*Q*W(ngO9lKMHL{MxIti|sfGyp-%9DtQr25X!Afrf?+ z?)qS3qu1y21-)Lk*WKvx*3{K_gLRylKC|&xF%Mt?mejeJri)O9CH)%lXN+Guzi8PT zn_n7!U~=TAzbH1MhV|#$ZTALo4}7XlDKwlU1e>hd%Z6b z;S_*_>&9HuDagp->AmL;P~~+T^DE0tob|gnwn&qk%pFu z_vJ;1?eQv#I^<^xGtj&+_0ht=-%jW)tWS!jLyW~b)No4cW09RqX=lAUeEaZMH4sHb!$wj={;fD>`Y^3^tP14HkcxX|!zcq*1&!r&C8d$zZ`P&z~uwPO7S8G+SIW z@eJ+GK%!4hFgWV+pQWBbMU{*U)8!wYzDnvhvjo#{E5v+?r0Xy`@6ir43p8s|vY+cU z_SA_%vN~`0!k7B_5+<^e#^0&mL^{O%vYu3=bV!Ob7~c1K1q~W+Wr1 zq(@lNaOaw;m;PmZ8%;YB?PqZbrr!M45Q&c%TFNHA8eY0W+IFzv?3i!eXB;Ko&K{=q z(agg*vJNZm8mqlwM{4`8P7Kj{S4E&{IN=imFff2ob^Q#ICUnhHK?S^og3 zYjqV1J^JNuwAi}@r6`{LbTh5TxkuYRq;<`V0!tffOG@pSX*;1}e{ww@R4|Qe3=Kbb z2e$mIS4t^HcXzP4Q)im+Cc>Ab;jhei|K1$7g3gG1O1BU84L@6oJ^=zTbIwKTk*-^^ zZF3>JH@o4D*8!X)9vMTKVY{Zp5RMn0slc) zvr5!yH7%IV_c8L73!)Pr1pqKDD zh>x}!K_Ph+CW(J(0~0v$SvGazTVaZGlxOK|mv;sA7TtMqk7&@wJtyiES}dS&Mn5}P zZ4{Lwi+C<0?o%6{&KUvi&oHl{yQT9#1I#4@XVLVLUn%xgn%78y?6H=jR(76Yh8{9Ow?IT3k|qhRgKI257`` zQcFCkYM5PQC^}D`S62WzZ=@e2YaX_kURf~omBSJg6vBLIklhgRv_nIw zcsolfa+DHBky7GC0yA=eYM?Wg*%E%H^ZbT#SOU^6L(Jq2M9J-D%O#0OPLx|Bs7QS} zkWcb>>KZ(a^_@iC~1B}=+IJ(^91E49=6NSIn2V-PJf3{O)BT{uZg2?ai(1= zYR&LCsK8(oeti&!LFk16^d*E%K?r)V?16s7>eyp}=(QDFN#rAJ3VD0MaHN_VUB3=< zgboiwRA`ltvFvcY^R*##4eD94cmT+Bxx^KV{^n7G%Fa6B>auC7{a{L6KPiP)2Mu zr~`r3=JCk(h{K5#ItVODcsk4nJ<6jAEJBVHifjaQBhCeS3nZ{IW2-w&z94-6!r|AH z{r?EP{QKpnZVy#FWxqq%>-JnfN6@??xQer;Ybb#|hqd=7{Y5gEKPO6Xt&aI~qO_IZ zGtX&X)t_Ej)H2fa{G#989|=~r+x4K=76L2vj+ssIrCY`}r)R`2{@56(-rx>+YN|c8 zwH{A>ox9N+tZwo&)Yde50!@B=Y@|^iVLes&i>T3^3_XL`K0Fzq5i^Slu=_!~mi9U= zHvPyz^jt+iCB7sv-Y7^QBzY%-mH2a-6dcEwT5DcDf*jn_P LpI20yP0s&6*lWJ| literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring.uasset deleted file mode 100644 index d2f11eb5a6010bf9f010c18b176afe5dd12cda8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6112 zcmcH-3vg6d^(=%>N`e$AAT=dTKOqG2Pe@8_-Rvh#Ajy(VGFVK*%kJG|+uePe_ueLK zEtp!wDpRG!8S9{Rh{kqkI%bp#9maMTanyE3P_)A|7DkJ8iZEISYb9Vj=e~P)-zJ-n z(4J)9z4x4R&pr3t^UgW%9)Du(b03b6k8hs~aMK)s_p!x)Sb)EKk3Y0w?1A(1|FIih z-qpMI?hM53S(&qace8)^?CIr)-u&f-Y!z{j|6ynFMSJtR7q>JVTJzH*ul6DCeA$_i z?B=hoKCU<175< ziV=6IXXN~QwcotF=&jO0`!RRX8pK`sBtQeU#qOX_4;n2jtQxFQjRXx<3r4z&y-e4G zYQ)P71BZICLorx4l9)cl43w1trT84P0pLHpG9Tb}Y~59^T33Z@gMEXm(zT)1;iz$x zS60_JTqW)jr?bX|EGEpu=IBCzENsu<!S1!#h-1Ot$JGO4= zy!!WNjL}^W{wd@*l=1xQ<)f=^C4Q1aip)d9&jBa)NMd1OWl?!i*?Nc9%P9bd)(zSw zQjn2D-o?{5Q|G=#xc&+gC!ct_<7B?oh#0ZZ8gM*?ajwIhe}1dKVKGXyYnl@GXlj&c zMjYx#-U)sJv0e61NbPsB5Hs+UVEp~Xf4h~?n_0Kwi#IXmZ&f`pt($otVWAcl(BT^| zeSRa!s}03i6pz@biv|5~a>1%L+Cl>Bjq3&rw=<1SA09U{3sWYw#-j|fZhq!mHce91 zP(rgM86#gqqkzjFG??G1`eI=gG3p}$6^?Z-86#_&q~@-Nna}VjMi2bP{=ETuFMYHDn?@6vFFcTBa76r2-DC>{f>~L>#%3x)>iZvsMC~a z58vwGm)__j*Wd$(=SmNqeSIV;Y3OuS!!pEeR&*nE7dm9!Hs=&=IqVGT(U1~vQo;;& zeEmlSB(X_FjLr$(CMU z4+|?Wer#_)spC}xhQ;DvJUDugqYW*Fhaj~qf$vaIWQVG;Hd7_|uzvl0 zw1lJyN7(b(FV|bAxD{F|UPng%>(=Irbg+q4U|CIh_DU;ef-4jph_1(Q0;XM!{vA)# zo9ko&B^EL|JKc3{I@3g;6Jah6e__Tuc`0mZ<7B4;_P+X=?_<6_Fp&srqy`7KE z^XS}E21k!Sn~mWFTzz=RCU3`(tz$W&((4c$-2TF+h&t8MU-{?ZpVLt^GDC4Hh63jY z4(}%?5awl@F4;&m;e4RiJ$VcHjuP5((V3!=>!p)_#Uh*d)(RQq{<}p#k6yJ|KsxzY%B4WQ7*V0I zU-W-?1M>fC(VxVX2${65F8Vc=Vk4dX1skN(U(){Hmex-Vx6@?kqsTd3B%U^yoxsT# zgon|p)2u^sQd34zG96Itom{hUjHmT;9#?0Rs)dyhe@haxlDQaXb5eacs%ltHBq%zs zzLb-23w%UuRsrHu2n*Wg%n?+M)n0#J3 zTgwucMLkO>f~)OnLMy1vuS7IIvufr0vySM>7pj-p03n29cJm9)$vA#t*& z*H2mo<&bQ~cb$}N#eD(t zFbL$qJ+KWrU>){K#fT_nyq^c<*b=Qmj4Q>sijU>Yq@0~7YbU<-l!VOa=1?(_L@-mx zxI-T{$OKJ zwy==M2Y59=@G+-|X@Yf166bdwlj{ev-5(Jxt5R9~(fJb4?H&gzd*_KheSHxmh?I-y zetB9d1TNXAp<5a{ZM0}&*XL>>?{DOC)U4VB;oa)Q)tm5EOOq!T5O zljO#3Gto0Y$vFwgj0AF3><-*7%0LWHCP+&pn8<8o5d!+)O$Es|Q8_BN(n8aMme;cO zt!_N{#Kv!Dy*>1XT%VY&ed`xYilBuVa1D={DrEwBK-9O+C&lOuCz!M+D%)va1e5nf z4oEQTJ)MrcSfBZF>85?AT5EA@(c2I?9a3VIF5Jq-}+!^plIWX-_ml@8hir`2Pn@ C;pZs; diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring_Debug.uasset deleted file mode 100644 index f37a9086977445031e4d77c55f6516eac425f467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5772 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 diff --git a/Content/SessionSettings/Categories/FicsitRemoteMonitoring_General.uasset b/Content/SessionSettings/Categories/FicsitRemoteMonitoring_General.uasset index fadc6dcf34fc5f96ed1ed795c4f9a7245a07ba8e..dbef5a717b9ea7a35b4e0e9e8207e9234f686035 100644 GIT binary patch delta 1281 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 J)tXJt|9^w{wF3YE diff --git a/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Debug.uasset b/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Debug.uasset new file mode 100644 index 0000000000000000000000000000000000000000..fc4f234d9455a08ada975948a6c2cd0047a21967 GIT binary patch literal 5909 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 Xe*ho_1jFYVb{GBecNJCEkn{f^ga83A literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Serial.uasset b/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_Serial.uasset new file mode 100644 index 0000000000000000000000000000000000000000..0c944827366f03992813eb5214b1c89cd95e6928 GIT binary patch literal 5923 zcmcf_ZE#dq^=t_c8Uhq4P&77$(hvfhO*R`6=twvFk%lJOC7UpHFbyxeH_0oz`!?^r zP1qJXV3Dah)9)D_sUMRu%1~-EBTAiW9kfozuc5W0qDA;oYz665Mp`Qb<2m=;x9@Ed zvTJEQ$=iGH`MT$xd*3bJpRZjL-N0_F` zN;1N99fw-APtsXGl9+}hb%?3g5bQCi)W}jCCn$m{{9S~uAb4;Nz-`zD-5yVk$LDKu zZ>R~>H8j@xT^l?;kGD49uW`Fv9?ncZv+>zp3@{&C65d1$M+jj{&rWt1h-a z{?hr~tGj;o>@(vJA30F`&DMRd_`X(h&Ryj|e$qpR%*Nfg0sPn_ja5}1r`uV(-WQ2* z3c%rYBaX=wWaO}Py5{iVLyvA9UTo57Z?2flZ0+%{Zcg3&RDEd38&S57TL+-9js4-$DaG#Ceqgw zPqP&6lHQz_V{l^biY}Tpi;ZM7oh7z0l{OIe>GP^`ggP@R2J>%v@=PfSDM~zR*`lJc zFVQ&-B>UwggJTZ=TO=8bE0UgNy7JxASIPWlmSid(ikL4hX&M|TzPA(I0?n$F8sK(~ zeE!!%Fxd6z^OZDdqKzffVO7Q>hd#UI zZ%1DvUF{0mb!pZwO38vy@BJ)lsq?<^{qtpr4olIUQa@`|qEcLbKqBXoW-TQ}87$T_ zkB}W>Rs^6I9c1tc3E@2yiq?!yj{Ia z?WdK8ab^uxtQv9uA6~AGov%JkJ6|1%s&Y!N&Yl3i32^R>-F`fgS+Y-2S(o87_@HI| zXUK3^0PiE9oKt$g3VnTQ$>Uk@g)O)W%`@09JXl#RBoK<@j;v8Py*uw1Y*YOiDYN5zIwQAv*aOY>kfu43nO<;XV6KAEY zG>=$LYDuIN6>F3%MdQWzno6L3LTa2PFbl94)+J2s!wSLJ$egLel0H!QvgnPSln1|u zsB5h>m$l*=RrN$1dbMM9KZF$g9Hpg9}Hp~B5WGkp%>d;7(lFs67z-BRve{}kFaUv?E^h8 z)v)OLZI~l$*alHy)l`h>hwELhsX2r`NaAb`n2IS9_E>W*5SUiQS0ML)_A;Jkyl1HJG7nDgy`APl1v?S;i_?Zfoc*;6d~aJyY9^aRiX9qp%6 zG068jg%&v=AKmno<(U$paq3BPz#>5l;mNYr+J&POdWBBeAaa-|x)OavR`kJI#LgA6 z)=VF6#ikz8&G@P<-FDoAuo8p7O4tb7p&Qm=uSSfBQp@`*!Hq4^>crS1#`Sz`N?LmM zpsqdm)>GCpqMJ{_%#*~_V#Xb+o2<|>nfgEETVgc>u5oL#(q?Wl;oqF{N5sk3;g2lV zQ&?JH~WGM1Ip=!TnCGbT!9&w;A2i7GX(OSihzGY;h3CaggkkQ&A8XL`+vUj`38Uy}OctG~N!zmwSe_PaxlqT(XBimRS0koKC`E>HH0LUQVws9-h) zr>=?0V1k0z^l0^;zO%4pPt%hNe|u*n=x$m#V4 z8fsiVe_gP~-B=f>X{f7d4AwXLHZ<1OyRbaKXhLPS7M1mK;{$BD^#!(keYyCCDozxy z8OVt2J_G!w$!@s4Py0^~`D`{m1k~b3Eyf4a5(r5_jNmqW@~sn&UB-~}{})rZ`uP9= literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_uWS.uasset b/Content/SessionSettings/Categories/Server/FicsitRemoteMonitoring_Server_uWS.uasset new file mode 100644 index 0000000000000000000000000000000000000000..27938ea646e95fef36a6d0881e7756853dba2f9f GIT binary patch literal 5892 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 bwYM;xeb0viz|e_?^|^2UrnJf$n*9F<(em%B literal 0 HcmV?d00001 diff --git a/Content/SessionSettings/DediUI/Debug/FRM_JSONDebug.uasset b/Content/SessionSettings/DediUI/Debug/FRM_JSONDebug.uasset index b7736ecf49ccaad39ecb1b5baff85d4000e5e0df..47e865784753e86a9649616d42b179bced504767 100644 GIT binary patch delta 1064 zcmew<_eySp0VD53Lq9%!1_p*2Mg|5TVtB(gS&m=b2E=4wXJB9kQhl5Z3|v6^ACSKe z$Na$1iDBQ%0_l9y1E}gby`@|DM7_lq4am4Ivw2V>KR}PzX27h;Z}&EPMt_~8hF&{ zg5~NVDnQ{60?0mw`2?a6BCi0U2&#kWC1f7M_!z(M&N7z9uYz?3$W!wsbG zFhMxHJd+o4NliY?X&?sj9Vqz$QzQd04S~T+KCrYhmw}ibR0yQe5z79`H#w85jrABX zDgNF3g^Q1oQxqyAHkq3zmQiYQCXX(sG*nD#@_e2HjB=9`c*WJkp<-Yg<)9pxU=5Tn z1hia2jTOohfYK~bn&BVNe-bds$@_R^#4wbAWceoZ@<|zZIKu)Doc(~}B2cYx^FVwV zsGz{)LOv0DUKkHb!Z;NXmp#l{rn2F6_a=UjU^JM_$>^^587S+@4^)l>{sRFM z4+Db&P|S04A!8b&tSE?C9GqHGl9`ttoLXF*nV%P)nUczI-FeQ+&DWVWFfw{g_GQ)P za!xEsP0ugNOf8-qz$(th@aR^#R{$0n?s%8fq|$VTj}KCRPxfK`!zekqfK7_snW6pD zmc#NOHV;@qyfeeYx82HvZ~*}V1UYjDIF+>8%Td+f^e94CNJcYntYDaKn&zVP|5@*Rt8}50)roXU}-%r z12KK55J;mVl+D6FxrD2YbvH1Te%kz>i;t003@Rf&S&S!^QF?L-k1nSSR7`sEDxL#& z@=zYs0Sp_VdplAO}LOB?c|A3NGxFkX1 zusj9|8xVjS%fN8L2^Ofl5IInuhDJ72fD!Cy5C@bKK>$fV1A{C?i~+-0pfKRWCHV*F oW;v)NEIv4(d1Dj7E03M3YAbwD4vuU z@z7(JQSl=F4Z4>i1tk|fdh_JLt0zV34~WKj*|)`5V;%PKoj3D&v-5Um+xlQ_jI*Xw zm{*Dbu+9MJfkp%kE$h4tO+APJ1Sv8s14K#r{v0`+nkAj1wM;AcVsqlh=d}y>7B1bL zy8me1X{A^Zbv7eCq3k3svbfxg0UV)or`+4D!Q6B(5MXn-Douu`tIPJv8V*YRxFyNb znfIYmrIWZ~*KXQ1p3uvlU!Jj7?Al@#+STf-%LI)$l`NWJ7e9vcEQg=MhTct8@9lQ`xbPD~x%|m}BW~<3Tvo)63jIo4p*L3tAN)e#NN=!< z8~so2*gv=vom|}`_>bWB`;GmZc%YXb_GC}aKf6~wz>9K(B`_wZljEW`%>_KK5@L8krgU7VET~&9G=Y&jnQ3#Nhguks~OWu$cX!f4DPIQRLhRCFG zD|UlrFxyv@EfLGO*ZQur(}%^D7vlER6EKB#8u1}NcuOSvsizcL%DzLoh=lxOKj}XY zh>ebU#ng8pJd1bK^wR6I{s-i@=628%*eS>NgCe-A5bs^-m26QXL#U`JxgwAhj;Xo* k{wsMfjt$koO*O*~a4%?;R8kY)ssmkI0+|+PNz}EG?roxYVAQN2rarwL?Sc=FG}#D z;wfREr-}tn-YTmH5u_l3prD=v>B*CbC&53cjq|dzCH}-Z?BkpHzVE%AoqZpy&sI4l zoXYTYcoYC`2mpFuE`WNZud>p7;93Bni5No#&RZpnc=c6>(K0qLdyfPTBMG`NFv=yI9O$ES$`r zvEfa2@vgJ(^Z7&$g+GnA{e}YX-d@U`;Ibn$VHfPV*$c4p@v(l4*ulz7AI23&bmA+; zRI+gW)BPv-QW?OK7RSSZ$GX2Z{$m{Snum+ZjkXS`SvyT zmB2H8A>;1G#$SAU{?oVjAHMxHt>il7_+|X0ZUS zVO^tkwlf)GY+(e8lTPf_`$Jwsl5CevHd&c1gmKX(D=g~W_(D(g)cfjlxlgv-fm&qd EC-oSUBLDyZ diff --git a/Content/SessionSettings/DediUI/Serial/FRM_Baud_Rate.uasset b/Content/SessionSettings/DediUI/Serial/FRM_Baud_Rate.uasset index 5d37eac59eb4e3c5838e7229c5bd9a0c5301cc46..3a2ef32375ab2810e9f30f7fcc8fb5f2624c7cc6 100644 GIT binary patch delta 1586 zcmaJ>ZAg<*6h50y=ezl>O)bCjV~OI7!fK+`{A$qB8q11cTl2L>bCcJ1h7pY*h=R&- zi+)5Ph-5z_s2}|Z{8tbJk%2#gpbw&;gy=&`JLlbf*L2f|UCz1ZJny;Zo}GI>SN*M= zXwkT$TL*L+0GN$lZQ41P0g#59xhw$uK~N9yLjWLx)&L;jD#KOs?p5EC{*&#BUf1Rw zo4gcV@HF+H{b?=|6R?bM83C%$_B_GIW;I7ytJWI9_|PQ|dBXu2E-Z&SkPBV@(UE|6 z{D5~@gtIq4*z(cVZ4dea;X%eLr$T4qu?r^h-?Evs?;1Dzn%6s0jyVw35n zB6mzD;r9mM(CHU9x{%Wt^=x9-bvtZU3}taT_FL>hS(JvnKGEW`TO49AZ0Q@3{h{Ef z#VJev;K{?@Kv;B&0nsOiq<8^3J&SB!XE)_wn4VtOs34UmWamMqhI|U1QDQ$b4DU=R%GG!-L$+DNTebNT`bmSj7LUf$Mo(l330AiM-|% zyv^KJ&*g9AHLlHzfJ*#@MDyCj6}&C$@S3=fL>1Q)FQO(Gf1Ls^^R zyYig79hH2i3CF6Ox>NFzt$%4`?P4Xg(_Na9PA94rK*; tXjc_(p&lZrsjk*(Pw5ws0?}*c8XWoxOkAoFK!=81tt~B($C~nX{{!u82|)k= delta 1689 zcma)7TS!zv7@k>OFK1U*UEN$w-Mm&Vu0oV4DQT>&Won!4Ll-;PWGCD`cFtKsh_;6y zFa&KNqSvG#h$tfjCAvKJ?n5tO4@rd3N;ea;f6hftx~3n@{xkpg{r{Qy=d#NsUp%9= zI6hVvvRV*A3u7bR`hrx1l3;L&L&yg9SsFsa&|!i*U>`tx0qye2jnR2;ZRce2tn1=b zXnHJuF7^rh`?5f2!U`a6N2nNljVA5@jD2l_YCjNBh;)JPBfg%1uY*LQ zzRp2K5F@g$r7P5{^;@EfB1X{gsn6}XEJ?6W5(X7WLvP_Dg-&p-)%Lcc*Hdri=nQTs zEdahXDl206BtH-(K{7zt=R?Bzexe|Jce;goEV&aS77M21N#Afg#c9=5t-M0|MM)sC z&oA`Jf^wXMMTK;T5dngQNI&}c{z`i{)7EUN?F|x1;0I9ulWTQ{AjD7o*7{ti(dt@) z9Y@hbk<&t7Sp&s+K=|8wWFiHLqQJL$wfUpKhw(`_^`sP}wxXL0&)<5WU&KLXSg&io z0@GtDon<)?4e5eJmZ6S%288DBHDh2HIEpzZwobfDxsPL|nh%xhb`iF3r`~tymYKD> zU!dESK(|BpRp|C7=&Co?#gHNV0m90Sh5zWPwxIhC`D*^7^Qv4-Q?SFzU|zAY5>2S_ zC7Rh(XT)xn5A$10Se8Jy1S{0t>J4U9!O+s7vBSj>x6?RRKxa4)-OH6*mhJR3*HHP} z6v0sX0Euo50qM* zY$`gu>Fgb0$fIZNjb#w7f=$W{td^2_+;rM5rn9Gn!AF v29pY*Ld}QP&5RuZ_=ixjE|QTMI+;bkX6BY|*GI;AG(y$C7sfg0OGooxD});? diff --git a/Content/SessionSettings/DediUI/Serial/FRM_COM_Autostart.uasset b/Content/SessionSettings/DediUI/Serial/FRM_COM_Autostart.uasset index 09f254119ddaeb21715f3e4af420f7625b4a73a4..6a8030bf8d11c6bef1e52bd3f47300d787242727 100644 GIT binary patch literal 3393 zcmb7HYitx%6h1%!1&TZb6ciRM^6a*}N(-T~JKb#;>4RFt6sF~mZ;V>#nKH$Yc7fk(^PaVDlChKW>JMmD2)*&8;YzJh3l(hQf+lCkg{~s zk`0R`5f$?DGB1cV+lCNLH}0e;AVB7?a%kSe%0f}h#57y9S>=M_rPs69ipZ_e%kch4}RjfwAdTtugw*UZm% zXx^J`+zsPRVZ!LFxd(Y%6pb57(kcqeaW-SRQf?LW*P7ZcW~V?hsiqs!NkLEU`K5Uz zD25@Y>kK_93@c5M1HUT}7u0n%LmZWNVA~^1Y^oQkXp=Q7tQ+t|T((4lebFWiD&5}k z8pKIVYvxrYRW?m3*fTkV?NumdQkBy+P-WBGe+EZ0Efmq>YAPWjS}>)k36rW`I&$*y z921KdMK#gct$$|{EVEno2hnQL|YjU$NV8B3|tf+F6qAF~* zrwfWML7!@&rRofYgO`cw(HEBwW@3%53A!}s>--0JP}}sJh~HT*aPHuRN10qF$6HwP z3Oz2X$|l+3pog){q#PGC#!7ER6nkl~T1hku3%uZ~5T@;K-Jtv{pLRfv=mvdb#;jxB z82#H=5cT!eU8_Iy)c)%n^c1y>NP;#m8oLF~;!$SfOHLUDP@8F~EVYa2gPZVSG}YA8 z;rk{v1Z^3qrrIR5YtTv5g}#JV4Wj+d#!oM{jv&bzIM5oDBz=Bi=n2?;m8_;jl;aGs zORuk5yA*a`rI?CiYL2AmQ*5L4iZD#-{;2!tD4usLVm9cKA=t@u;*0Xm7}M{yuDF{} zgo)b1@!ZFUF=rMH7a*!{`C)t2|5&EK@-^bdG0M(hNjF5J<1@M%DJ+L4yzCBX%?iiW ztIJ-Az(PSbTas(0RVg%KuniJU2F`pxSqK+9BWq*(n}~&QC8|PJnwYf9_tQQ*9kR2B z=64?cV}kub7IRG6AmS}Sy`8EKeS6qWxt!&@r?p}dP57{@dJLrXD%?Xv&2cVsoIsXb zAzLz?-+bsT#D|+0WL9n+2T!}>4ByTJ& z*O+gX+y5^k?D6(wgP2SH?JW7=nS&Ptst4>I z(RW$$Aun5|%VIaVj$I``VhK3h~Ur6p8hXDO3xZ`JTg)Fzx7vy^F`j#&lFZ_iHm zX8P2Ax_$RL&O$twjKeC7@lKO*B_W@4UmX2Tf%fBO7`1PPunB;RSvCd`sv|JbX$Z%$ z4TMTJl(2Wsl3IC}ai1e^lEahvs@xsh0cL+Smni|u60J$gXX(DUu4#Ozq3bB;s}OBU zT=;a&hhpqoq00%H?22(Sj6QS6sKGX%kH_Q@UvTH(x17K&1i(fB&lq;*;Pe1`O@jC^ zUW}ZR2qyqF0mz6Y+97#G2MPl?*MKZ0BHSv0UgEKT+!=sgleah_Jui7FjI+YVI=96! z2cVz;9>Y*)c!%IA3VL6C%wZ!)7hozs{r;yo#eat0x%|my|B}-`Vn5zyApmIWEM1v* M=H$#`XGq}x7eD3R3IG5A literal 3547 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 diff --git a/Content/SessionSettings/DediUI/Serial/FRM_SerialStackSize.uasset b/Content/SessionSettings/DediUI/Serial/FRM_SerialStackSize.uasset index 27be82e1f5fce713f1dd8594ac7026c97a924e3d..81da521b38032ff32950aad3b42af3fcbbe23828 100644 GIT binary patch delta 1500 zcmaJ>Ye-XJ7=BM~v+YdheP*Ro%XOKTNR%X3c^_eD%ZMm+xl;}2T*s|ige!{r5rpy; z{Rm5lg21SV>PK|>Sp;EJNd1WVVF(o%1!*^X-?Q)N%-O@vp7-*c_k6eaJ85~B(_13A z`&P9i76ZUB0RVsSQpd)O)|Po_j_Ls7kYDHl@CP090lpd{vPtB45x|VkgJ%`j$K-*H z7oTb-UOjR4f3}|}AJmUlUtZgI|H`%7iBy*A6tg6uKG%V744Tl5!X(0N1h8Q220JKR z2;--qM%wKPdINBDvdfN1sPT0By{^zESEmGr&VHy$##pVx*X|9vC5Nvn=<&L{p`qvQ z!~7VDiVBCLs%dg) zl-}g`%og`eXl1#YGM!VB_e(Mx(wI|QBQ}x8<%P{1LuZ&pW9w_nV_DjACTUNZ6R}!d zeM`3_JEcIt)gT_x@G^-*?5k~!tLmZ zr~{1X__WkuOd)%2NZlSY!^;ybiSenQIHf2Ftl$nFS$It?fp8m{OUz;;23r=nh4hD@ z>;}aGs5G$-Lq)-#sA|*$wED!7Cxq-d+~X?(H@Tn5St+NA)Zk&BOvMRj>b2ZUWk7Hm&;$vZv^D delta 1475 zcmaDL->xvhfbrTy!%z`j1_p*^Mg|5TVmQafz@P}EC&%+DgfTDyS&x7s%s|?ei-Ca$ zNT+fDF*ihYA&{;F;!Yq|tk`$+;}J{O<{vXB^&Qtxdu!KbzJ~LK^HLk%z01~a3h68W*@q<)pPfSpn9L#DC zHc&q}xhS)sL_gTqhhejG+CEh zVsa6it&|YZQ9!-Hsl~;a`FX*qB_)}8=?o0dXW36)&!)@BzWFX&A7i~d)MH9e`X|tH zs!%q_TQGpG?gvnv8dMUWx-UR=I#|@nLB#4Al%bN}feJNnD}<~222`g)gu1Ulb=r8; zX@ceIAu2#o2?EGIfx3_Zq7Wi41EC12gXtw?9>e6nT!cifIysg@<%SI$--PZQXml>AO__a zP9TO^dz>GvL}H!X&8>*8cN=#sqvd1~ z9#wasIwZBwgsl#?{yQJUIUpy&oC9Qn0Z0re4F-xp5>#|>F$h9MgeK?mgmD7P5HJv% ze1@lhQyk87<*j6tn!KM^Tum4%2KKcSlmip2f$~8CAW_c>$^4kLd5meE` diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_Authentication_Token.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_Authentication_Token.uasset index eb13a9b6fb55222213b2a164878c0c5d6fcadba5..b0849c354ec3fd1e299e24f1ea9723669676952a 100644 GIT binary patch delta 1531 zcmZ`(U1$_n6h4#eCfS``cQ>1?F@KHKm}ugT#VTbX#?7xwo0@ivi6U$!>lg||3cgyryuSsVef>i@)s$7s(v0yW`>iC^RD37w%p?q@k^lCtrbCHMahtg%?7<=H^TPCaKDb-|io{f>T zGf(G-W%%j((z!z@Xk(+^OjiOok>r6dq?BQ)<_RUEN<%4WKsEBx!K|fC8aYX}ObqO> zqUTjv)zyqOY4)fml)P@iZ1?C3w&;!TiQ3=MkNGP4mKkJ+Xm(ThF*j*{!V5g^R%Z&u zmGHjqDe88*I`*(4THVa8=g90>mwATFwhuCNw1kkoTbpCpZz?^4%?NG83+{Z@&*#;} zE2zu}A?6e7V%r@9u)1NT#4!p1HY?V$f6F~=M674G{NY$TmysgL=Ql%a$)DKv8YAZ( zyW!}|sqv`KsQw90LiUc|hyixhU&ZFcu=DsU{BMtx-4vU>pJO1`*xzDnBV|>RGp3fc zq&|fzWr}Jd?vyxd3~Vl5I}jKXI@r87#(oWiK3%KlEzx3!b)Vl26lOKWhlsJSgWX#^ zj$vOGd}mG-wqX@y!uJ|KfKR8|5BgRP+{ikehJLrhcZmo$Nvw7)S%le!}z zAq>xjLnJOR(S-|w3lm8U>W&Z>Mi*-0u#lLzGQ_cn_x}G{%TV>CzxUmH&b$Bq`-WNZ znK-_WCMO#F<~l;iC?!M#_VvV#+D7dbLUO=4ZX^VLms$p2RDlOSZz?46Fi@CPIoKR-VDNfbaAK1|?@lASg$o=asQH zEKAX|fuQ8<_By+yaNK!xNDf89F{kTTk6#_T;<6kGlabz!oi7gPk zgw|{QZZiMi(GvSWo68))yW=rAGI$~|5SM(?fP}B_37zSeWJ0gZxtOT2u~AJg%gq^P z(>cquldWiLjP8Ie^+%#1DK@Dq)RXrw&vhQzNErO_9v>OMRkxodwPQB;@N|K`uES)u z*s5WRy86=XKy-MzV^Y*7$#N*%?^lZ=-Z#_tcL2$#u0Vjohdl6 zP$*_`eM@;hkdWFZ#bVGXo{f;DYi+Q)3XH5luu|RZTm1q}l=5IXw?ANgD*4#LEt>VZ z@1U#NL?`mtZf?JUZclbyf~16BL0FMpnAUv(UF~0VdpU;&8->XH5K)N`qUsW=w~Gg} z3sr&mpSo15|CO(-X_JIW_(C35P9Sy#6B^*b4TMOVU=bb6Du|UU8FHj*@DG3|`G7Ja zB-hNY8k;MBu9H@C8qO(sfqH<~tYr2XMb<8uC?%*(i!z0nV70F z;BiOT*qq5-qgNfG~x;pAYvR~Vas`KzX2pf01^NI diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_HTTP_Port.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_HTTP_Port.uasset index fc3b2e6b85763c2c61e547d190c757c44176774a..98a8013dd2930879f025c56d5861ebf54cf7df16 100644 GIT binary patch delta 1587 zcma)6OH30%7@h*H?3N;r@&*w>s)4X1VnPa5DFQZH9$71zkkC?Atts1PyTz0c@j>w5 z1)Xp-B9v240A zW0@y}dd=QE0uW%_HW30Jd1;~dtd3T6uUQC52kFivgk$y)C`gk*j>4FN@nyy3QYx-_ z7eCFdK6>MSa{rsZ{wetH*nnujCIIUm1m9gljINk2(Uvsl1k@p?rOSbMSS7bMBd#p8 zL$PQ$kmwGKNMvm0gF6>|9UeItjt@&7*&PpshhyZ-jl~z$y9At0kH=LblvPJ%7!$ZUA~y4h?1%Tog91jY`un#SW0uZ$_};@ zE~ibVGnSr-3T%GQ%)oqY@9_aggH=~R;^rX^Ck5GnUv-q}IZUG1&if9$h7@mNi+PBt zwM_m5VqJ>3H}41V9RJBXvYj^o4!v;wRt@dIp=n&nZam$$E02EW@{jKtF;uEyx{>#b z&T?hEn3fDJ^N^^7zU8W@i>pbq+vqUoto;Ma*3;ni!aYR^w@A}L5T8w(S;193;CcPC zWFu|sq|jEr)G`Ls7I-?qmwRwYf*4dnQB~*+;4w>d!BuMb_grNF3oll$5*i68iMCiw zQqL!%k}>fz-)}lWXU&CFuYg09rLg2$I^%))gd^hOA5{bothM{;SvX6H(c z7VWiV*5XTqNKGO)U$yH$85fBtz{%PjL~BPKTrvJA#E#%^XyQOJM)ao&Gk=n}U+dExZdkY?1;#&+}Ql(oJZ-ggZ}OyX(NfP2;4*xX2R=ttYhzoq34o&W#< literal 3629 zcmb_fYiv|S6rS=B0eJ|53W7x|NFTdxZLvyt?4w(^(z159)Ij2TyPei6w|kd+XA4U- zX{-t%{y|X*Dv6|qNFo721uH7%X+^1SZ;S0$`4L@cV@nG z=FFLM=A4=K^%QTvoKB}-9LdZguh`)^6mUIG7$47A zkXm;@j_I;!;+?AC4QgB#swT%f++nWkvKkL_A!w+({k%RRFN|JUZWLheRlmW#^z94?XC3rt1AN)-USs^)s^Lbzt3A!Ugh`JF7Q-T z`f5movAJVRYy0nJj0`iz*TKlSdRucV~f^@OXk%oh$D9L9E)?kLFSkf1@oZ~bWi zot3oal?f(h|B{o_@ZM|!1|7UbGs-=XhMKSZq7Ca&-*5-#+0wHCEBOfPpndriN!M9X@9f$cK$E&qJ6A|bl7~qLcHSblb#TE7wtnM8I@hezmDyCZInhRo1mn6OQfjojK@dWkOvju+<>0IJqX}$O zd33@g8Z2*pnf8%U>^ZUT>@0#qQfxJ8UZ%z*MP4r)H zu&|tcIB+lEWb4o%?V1@eLO=}js6|x9L$zPS4-vlZ#vYG6Exw}MV-Y$x5jnxWI6LMr zTs$PM?5!0qEP{(y$hvHLm14UlN$zNuxu&!9$LWKUiEnORkElM4Q#{$>1B?6X3BTQ9 zV{Jm_RAlm&C-%qjwe?MRQe(7^$GIjc?7MS^C*9G)So~gd(3#dgRpZTO%pvX)vX!nUC{7NR;95m?N=v-DaG! zKpm=(BiD4cz3`V^(+rjaj+$xAg1_}1co59IZl{8=;r#v|aL#WcV0n=Q_xA1d8mT+v zmRL77dW`BiC83b~l91S`?)~rJ;91GV^tz4HaD=RJM((51UOt6za>dZAiLuk$mZ0u~ zP$IJl>21>^R;S2nuTU+=Z3sdfY|56y%{t#=I_2OA&|_x9E|FY`)xVY8MUtC)n{p_Z zpj+wtkMy}rvAlAn77q>XEl@svPPvCov0>$G9}K6@j?r*(kLFqT8tu=5jr$!wfj%51 zBnk+3^3BLz8+=lg(PhgIW?^L(0}mOG)nDV#4}DIZmWa{h(|D*%M35p<^N{$IyxNhNBl^VZ;|I zOyHjYJd;3h7HF^8u<2H7c*z#B!B;FM&O=@rW1)ySD6?s#!u=-3a+ueNi3<~y!vu&! z1+w!lqZXhYUMo2brvV=#G!qC>j(WHmw;BlU24!Y~i3b=cXXXG|jR!f%u57lZOe}5V mAk;_y_`QGelWy0-BR|7fdop;SuKt?mM*aBh{Bm<>$o~&_FAi=1 diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_WebSocketPushCycle.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_WebSocketPushCycle.uasset index 47a4c5944cc6c23cc5c5ac4b89d1f7fef3f6abaf..fb59b6625c18944919c49ae13b39409f53ed370a 100644 GIT binary patch literal 3580 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 diff --git a/Content/SessionSettings/DediUI/uWebSockets/FRM_Web_Root.uasset b/Content/SessionSettings/DediUI/uWebSockets/FRM_Web_Root.uasset index 8bf64cf7facf2a160a88e8cfbd3f31cf5e36271f..70c11b50e26891b008c38dfbe4bf3b42321b0484 100644 GIT binary patch delta 1208 zcmZ`(SxggQ5T1oz+itt9Ah&Ee1Qi4mFwsU54z*wmVj4svvDUI;wQOO#g zF+QmeXkw!A4oWb=7d86IgNa5BiTL1?CMMz$b^h&E@cQ!4KgT~aJN;+=J}r79jjl0u z2msh>-a2;7BL{~0JI=(1NdrBx>+3nB9TNCZ0@@^ z`+m|tGVUGcGskN-6djy-Ra{YjL%E~Qn>;&NT9&5@U7Wvi3q{-zNnL~=1XhqlwmXZ? z@DaBQeQCaa`zdbIi0a?=`N_PX^PvbM& zd%Hp!eJQSm6fHUk*M@Iz!PjXsOIeb@f!M&WB9@GLX7N_~N3IjMnJYX^6xJP6BXYbt zAglediet8HcQ7dj6CDAVyz+dAnlX%X=8XBJ*e>&>M!**odC8g5 zK2axD;|QPcTyC6yCd;bdEc0Y3V-`N;GmqDKiK{@#UQWAT-#<7q@RVD?^Sq60XYEqi zSBf)|>TIQ<&_IB|287Td;0H%8N;Wf|aIDBWvhu8 zXScydhT)=UWVE0tSn-|1ds?vT%YhOX&3oD&s?ce^!ES2lUO;MGsP)19M7_#uHv$n*P zRP+a9h&tndUZajYOn1dR`6&)Z|mT}abW6u(!u>HgdP%g@~AM+zx2`;S;rBo%>0 zX@^33=p{nvX_3%FLRj=tkM$4*K14No2(m2ggX)~^O4FhPmvip#{LZ=O-gEDLUG~^M zUa#plF$NzrofD@tay?^glrxrr+LZ+-%#M9z4rMWxiF!_A%!vADHV#9ICLv(OQH`Vb z%%@GB=O<+2^;7ChURf8jJ?7+JY80CGoJd9cG z^|;vVy$1<+!5fFH=yydUYH+y67lK#>SsU+8-RO}Z{?F2-Vvs7;j4SmN4FxTvep zQ)fsd;8Gsf!i??_-vSe+26&b=b+97kWM8p6Rl+t4O=`Wcmw8Lb+aR$2@fMKhgm|{i zR4Leth}5h=z98aQfqX`!E{SXuQKU-$Ldpo?8zG=~n9`YC;4}KNF1yH(?k^WudgVWG zO#vqr-2xJN9nDFLv3?Wyq{hl`tEkn&jqimeh>vo^gy-C5rI`~4oxUCiHJD^<4a`by z@KQ3u4=F#F+$;MBwFZl>6zSb2=rq`@^jy+zM%|xI!&!q}UKJcS^za5~))qpE(Oiz) zG`_eQj$|#1a%zW};5E1E^QknH0`M9)a~*i)eDq`SR623usa#C)(n+EHSi6F(*>HUq_3I3a3bfBr diff --git a/Content/SessionSettings/Session/Debug/FRM_JSONDebug.uasset b/Content/SessionSettings/Session/Debug/FRM_JSONDebug.uasset index 4db593f14f04142a3969029aa6bc4be0ab2b86b2..39dd4f871942c8f78d5c01da3112e4f684528bd6 100644 GIT binary patch delta 1446 zcma)+&rcIk5XWbsE$p_G-=&rxRzNBO1)@>X1R|i6#tkIgo!NcGA|Ot>nK$$O?CYC(@9n38`J(X} zAr`GYmR1b_R|Ek3!OQ4aW!(oIKr#kHB7lT`IR)S@4hWb;{{Wv^d{P%)E!H3HY!(>$tHrs;c_*dZx46-ygeK}GrD*(jZlBMzdbN8Cvx8cDZ8lEZ;&giYxd_C;7=mS6gX=ike{y^N!Br_*L?!6FkR?_euS5k^-Kx56x%j)=%?E5EHAP5g zV`9Fkg3pb|7v3bPK}^q9L<@T@TFbs+e>kCB5~__Z3vH-@3onccZWe1ycAlb%8u@t1 z$j*t5J5mA55Dn6wGs5hWMf(`9(|gt?6$-^{L@=e;Tby)$*r>EC5uKJgg?hH4L7>^^ z2?lNKs*qjIVSWZ}%8mYxe@zRdCzr3l#2)I;3Kpg}REhaKXJL(oXAMO>;)TN$kMp=! zrinxGTd1?$9Z3Nlcn*goN@g1eA z$Z}Md2murTbSe1_^HX{BIUw60{=k(Ls@mF?rt(;+pT^nDXv}NIucc~nJ-#l=ZZ#&2 Q)=i&8faon7a~Svk20zW-hyVZp delta 1266 zcmaJ>O=uHQ5S~q&)ZIi$XL3Z}a zA4XpQY@WMn@f1C(Ek<5yHkbEK4i6` z$OG?QFJ_KAps+GgJbiv1*4`F>;vsi6=%q5l`rNtF*~+k<%ff0j;KFC_A&hyRB(_kJ zK)qNlm(DEc#Y&~LFc0wI)a}72^1c&qdlOz%V12^Z zh_|CPuL?Ht8xi|k6C1p*#M`w2FDY{Dc+zani`WfXyki!j$8sAGErNZxX+gXz2WFdQ zM0IxCMC|1KqAS@HmK~3QwMdEse#>lm6%8eVVI>vXX(8YupBC|)iUnm17iE8FKtTM2 zo6I4*XPtg3$MKHRLrWgv2Q*g+%l62L+^LK{Gi_B`&;FXvR8F{RABj{`8SC1t-E0c^&)T9CT1;N2^S z1lEPNHsRS$^Gf63pJ47N%#PE$0E w{#8tClm&Qk*uE}z#nuUsG6M$-AZ$YGvS=jvSU29*!a-9POtULeh_TMmKYL-STmS$7 diff --git a/Content/SessionSettings/Session/General/FRM_SplineSampleSetting.uasset b/Content/SessionSettings/Session/General/FRM_SplineSampleSetting.uasset index ac7f921dca6a66dba9d31b7c5b3ccbe68c1cd35b..a12e6312005f43c4b4a1d00fbb883dff6a6d5627 100644 GIT binary patch delta 1598 zcma)6OH5Ny5S<6K^tC|w76fg}ugJ%iPuUPiC?d5Q60nk3F)^h)v7{7IS`Eb5_}Qo% z$W6LK-Pna&6OAE3OkB7yZd@2#n6Pl6F~&sVA91GdzFKIBoV=HrJLlZr+`0F?@uhj8 zRfsRPjTYDe;D!KzA4s`uMc2@c9?azeWTO>D04;AfqC>Jyv_1F_;(ubv6^}mqa_rts zYiP{!bYyX}La;M~;Hj3I7W-Me;;f1FN-6O7`FAy1*T*1DGKQKNE zM=w8mQk#M3>TqHFEm{6KUmsX;KBSQ}-QpwhX!k9&6(E8|vC* zKMJV>?i7ASVe=jaBwfoMb%(a;`2LlN+c`;w%7&0>fvLKBS@vI@GRL;@G`w>=Thx>Y zrOYH&8CrRajwD9c0uk4-D`F*^6wQ{OxLG+UUl7_5T@<`Ku*8XOeL{X;(`xA8p)9lx z?yu?DXH6Gd5RL4vMqNO?|CI<^73bKItX}6Z7QRMROtoV0sYC zJ0}RWY%{;yvY!VNz39#ol;9<~3FVl}il~aW%DBzp7BGEV2X-U>AZgrPjujE1F@4^ZmuLQkIVDl@_-t$(Zj~?@q>&nIcW-{|hQ;>+t{p delta 1393 zcma)5OK1~O6n&FslD?TF6Wf}mX_Kb0A8pzs1*_JLMnthy5CaNkC8bKbsA2;`6=tn2 zG+gPTeil*}x~PlbN-0^1g1EQKf~X+6DaMLg@11!Q$2g5%GP&=abKd9PIrBRHA$Bt( zc}pYtK$% zM00BJQRzomN<&CGoOqAysD?{zv4P=L8S6%DOaond1&gjcbT_>Lzk5v@hi7sUhGi8h za>&D0S1yg8utTsUb9d$AvIbA(>uo;VB%PbQSh!G3=Z+m^dil zorHC|D(VLQL-z%BsRlZINRX7M+Z6Un5+=m#y12mprL)#H(7|r*Kiz;gPU>|y?>iPI zV8egZ400u!iQN^1SA`xW0uOm6G%O$&=ByYms_>cb1?xV*m1Hm##?js5gvz( z5{3QT+d>EYX&A^Wz1n>|v`Xg3KnVoZXe5SXo9R-&Jq9n8om$>DF6Tf diff --git a/Content/SessionSettings/Session/Serial/FRM_Baud_Rate.uasset b/Content/SessionSettings/Session/Serial/FRM_Baud_Rate.uasset index 69b5984fdd213012d2df589c7da68fc23410d983..9a4be154c3747d97999a8124a4f16fd5683eb00a 100644 GIT binary patch delta 1790 zcma)7Z){Ul6hH0OZfn>5V`Df6tZp!Hqpyp=VhvEbt+l{_QHFq$@#rr2;^VcpubLUM z0&2`i3|nr5Px=Y6=qCsSH2h0|PsS(-$w)9E;RD7`8WR+pCi9&8?yHR(vR`_0?m6do z?>X z2`9w3iSk<<_i_9fo1Fe8?A(00jqm$->h{GGO~;R}I&){!*S>Rq&#d030FoO?1 z`zcb3w!XNL)N{iuZbWjLKAeTuM=#%Kox>3d#p98o?YRTGmXy@DKDxgfbAUc0cX)dy zm1Y@p1P1PX9&QKzrE^cqBJ}mEhI)u)c8;Xk#`jcBR}W~qhP1tH%46;<`Gh_K5^ty8 zFC<)2vQm*u>u%J5&_Q{;8bgZDe~f^+bw;D|i5TN8MK#8q-$ z99R+yyg!h)VxGK}|HBIiU*2N0JeOz@{PX15Nze5mR$#diU*{>?`#jdNIigPEF-Wrz zol?QK4z3bQY4GviJR$D&R5p=8v8>=kxlzuWYWM_F-a!hr0IC$p3LJKxZ`SZGq=Y?Q zdr%u9*6b@OEIay#B5H1UXoqSt_#P8-`S_T(dC5z-L`ftwTG~{iD&7APy6J&vjBYi* z;q`m|-I4#|eZ#SiM=O`Dp3RjHqg}MTCvGbn%4i`DLL>jV^0n4dOA(DtPK9s)c1?j7 zdDNGxXf9~ieUs~#N{x<*aNZI?y+wcm*(BR|MEVxsSuI-bk{Y!;f}IFp(Prq$5^DLw zs`?618KH%%>jTxo13#YJz-WXx&(BdgjvqNFp(ve52zm! zsDTUE0qUiW|1APG!IpGQtR7&eMzrEN>9kuNO<>|=dn*=8pixS?X##X+udWRSp@yHU G-tZ4;G%2?L delta 1613 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 literal 3549 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 D{J%GqX&$Ti^#LoxS&- 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 delta 1318 zcma)+O-vI}5P)a0c!Ndd)VvKqq=)r@a@#s-c9*EKS6C)R5@L!yHyRB;jgh{tEZ{GK2-@KhSQ=zw& z<2&tL3P2|&i{d^2ut5X;Uy=am2a^tf5NWJZgWX^u>kfIWq~}}!ZqiLf01IR={fYDv zJr)^Y=IO+kRzDvbJu!Cm(Y5naiw7?6x##-WersR+@$~(ND)Stt0ZXKg>SkII(P(Ir z6%yW>pM1MD9FcC6(FhKu2Qt0M;bY0ODHxf2--Z*Glc-ro@vilY6r(g6@VQOKR!_MD z-n<%$9XGqwo{m&ssz2EaPd?9SB59nqH;cfL#OeNYW-yY7ABEXKsRbA88Oet?9e!s! zj4nNR7Ghg90`#;~inrTvQTF0%$A14N+8V7)qy`4k=lT+y)qyR#S_jmD+~TzZ>RiW-5lUbW~tExj`9)p{|dr)a?r6%mno{C ztW^8CB1{$9^sm;iQwbF=zM!0vTJWV(+d-U(HR`fXT-_nMf4m=l%tuT^;q$OT5~7D2 zfE$X%7@!0jJ>4$q1VT3B6;H-ho*&uOVY)Y2wIa+Z3E@|8cVWpnFX}^3=>)uz9d~G6 zJDu1{sj&W#RYsQou-<1FrdA`wW@uIib35l(u;jXk8G;Iqxr_UaS3vqlU^5p}G&gqS K;t3m*#nHdh8 zURCw(T7ScqLs+=9rddbcfQywl&j83&-K1Eytn!V$qp4Gb@B+hms4MI-+@JxiB0p zqdLsq(Ppj?28$g>mHd2)cZULr2}Cm)N5U~B5^bncD(h;itHQBxGFe#}jU|&cwMsM@ zuO?QUmNGLmKTt+Ak@1XkiT>ml2D3c)U59+ zJ8*u}8;>7MUGZrm0Dj1UBIEh(EQ<3RFQhqh>Vh@F>WWx8?amNwoBQgR{xi(zLN?eO z!AmnU?7YCE$tN4U7nZz=3A;%9 zC+Oy_Uw5Aeie;&VR?Ex@%PCN5`}Z1)CB-!LBJqN8+n>0ciJc3DE_zhMNt#w%WMO)d zO$)0>SXBS)`V9~lV_G-w8q-zVrt+;w_Qcyk?MzdGk^!rK2_9scRXZ^{z(_E`gc}Bfqk!=7O&_-!hAd$;NhDSbhK% z58Tn7%d&1M!*=)tdV$_vzvDJ&oYYO#DGK@L^+P8?O&LzOwn#0%_?xCnnA)ToYPYap zz-W)E>1wB@YizbV%R@(?Pm?h6t(L}-%tZa82W}hB#AeeFbY$%3lh5ZtOXqzeb9%ez zH#-hr!Q@sovw|hxVP;faTkD22jAiH4jG!q_VI!hg-igIpwp%#hMd-(c?fToaX!5Z) z*F%l;a&vXjtW!2!`0Yg?nq5x6-Iv||_KCAGE;=$+dvdW=0)AA*1 zSJKP>!iVX6XJ3bJo6)AYGV+}*IcV2rl4wnQ46WM4n$rj0Gtc?p91uCs+O!lB(2J`jk+{p+0^?=??;G!&mwl48M6dCnLhjQ zrb7#uKH4PXA3_s$D5h(iR)$zeb3b`FeJ0s!w1PYGi_>(^7yDM9iEuwvjxIIsfBx!k zOS41Fv_!iX4|F_LaTB~OGe^Sc);MM#yXDc;JeS;bM~E+ku(~)LL+z;$;ymOzm@~A4 z#NEenanYsbb%!2`-FpK5Q`o6F=5iW^AuRS#*2@pGU&>V=0KJj3dd<^_)MO)aR>>u{ zX-nY1HutiY-fgNm^!|^RV!@!Lq$5Tf{&;scuGbI@Y;)%?k8#hiv82aNP-{!en1-2jBLcINfsV#823rNutP(}!PMO#yW zzSS-utDRSzkQ>4^4Yf)`q_(!YCR|k&i-v0w(T4i^%4kC@QWuZZ(^_U4BC2JLmH9=E zM-^DXp^9;^H0kr^eZW23wM=qP60pRoyk?1Ppv$xZ8LmXCW(0(h&6ylCw!0E5aL`Cy zSgEV4j@QP+3fJ;jm7*w#x`s$YG^|9F>RReyrvLY#GKaZ(mON0*05~V$Z!X%iy;s6@ zlhB_J?bHqaxObv{1Ed~-*^ca-^1Kmn!u_Lm1fv~qyK_$s_9_lX7t zFcM$DN1i%U)+fMmJhP;2|k}(4?M>opegJ{r^tZjYbZddx&h9ZMfH(|HUIXb z1wmwh=&1WfWR)~^rSkmgA{tEo$rAZk8{!`@au|v;U`L63k8=76UI~NAmvh5m$QYQg zhfT8+S+|UDRxBTu8F3)XRY{{8?9=@5*8mav6z<7Zs#YOt+rn|X-+`+2XLEbiVO4+y zU5QHG$m+ta3`}xO+{~?6kMPRcjZBlOmQ>xKJ3C9x40(uI?#IY6E|V|{e$)5|xY$Ef z<73y+gO|D>m%3ozBI4B$SO_rIL&fJ9LR|)2<{>hC>>=c=Wg~r7-R)-V5lhpsMQ(<_ ztyBYb>@=K#8Y32tQJ14D{r&w^K=1hD=~6E^Nis>|{r=<>$RFmCV8*_Gaq!2chozv6fR delta 1527 zcma)6O-xfk5Z+hl!_wDMDPnCcw$!$2h2lve5wJv?5(}7yzi_~UPf`Odw69Sk2_8(0 z90<6Y5G4T;NIYurV1g#%Ne`Y#G~pnL7vfE$QSqAq-R;abKMqSR6*K6mSTe3`+!pX&|!?aaBStj5yLjCc`u;dK| zPm(38QAO>1wRHyoC;aURF&+{nDH0v%Rbn84^@RuYGC$`i1qLh$iHQW9kg*8axYdAp zL@B24v_?+7)Kc`E8?!4m;$ZqqDwT4vv7TvExx7u_xwqiim~Ai9pMkeOKW~hriJySz z%umelJ_7IHUw8)?h6<|#CHo*Y*+PiI8&hT#%$T335N!X+OQ-r@{wiy?aQF>Q$joxx zV^+|i20kndS#)rTX1c1ixxQ!75%MSm`5_)-V?jr|wRNtqIn;d&h9^Z{;KKz8DxQs6 z+jT+UIM`-SDenGzT~Vjt>yG)~&&3i&92Mbxj^#nUF%J(~6Umi8B*3Md^tC z2(8rDYj!b&qd>W*D1r}B7R*hWls1ksY&&Gn)CFx&mJ+5j!N6^#%JYFg z0Nj}mM7xg8mzet+8`Jq<_a|Qz;+bu5g53(`j~Fm~=*zO;EumyqB50vjgGrNiuBZ16 G4L<=stLk3> diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_HTTP_Port.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_HTTP_Port.uasset index 63192ad9ad8cda27fdefc7e5105fc3bb171ad362..882fb10c6cf684e0fe3e04eee105032ca6e44cf4 100644 GIT binary patch literal 3701 zcmcInYiv|S6rS=F5P|X#MPbn@0_|>FTC5e>UDz$)Bb3|SX}NNH?|Sdu!V(|V zq7dT`i5N{35(&o0j|KyRNCF{(ArgNmKQxdu8t_F_qN#v9tmnJ;&a&HXss8Xwr!#ZT znKS2}Ip@smv5r|guk`fvtR2kQ$U%(#PCfmx0&2gm+k5_J-}dfNXUcYY4~N_j5$*X= zjMY%@3CVFoHdpXg&E&P3Dw~=vt1X@=Hw;-*quexUYKXZfwTd@IwfK5&8lKRK+QucZ zSfnwc=_cu7tc+R*ZHZkghBG#u`buB9KTug7D)Y@PtEen54FvqYs?v&pFF4m*R_?DN z5yqB~FwA8m7$eK9xof1YsF?Z+Y5{6v7EHc&<+q_rJJpJK*R;Y%y^9u~I2ZUS*jce{ z`+`M0>cX^3F8nrl#?J3?>(3?Yo7QTJ!i|ZI9X;1GR zHck8|FZaNGE+Pc8coS&uiNt>pT_nwnS6V<0_N`^Rg$lh1(A!5@CuJATVHA9*n;0ZY{nLH8YdK=eS z)%K1pQ0FIF3+?JxB*S1uyQcpZh#tA&AAmBYSE;#wUdcj zE2&Zo*Wplanb01-LR*YtEq@CQ#cb*IrMDJP$Jf8Dren;PmCTzllrEo zc>Lye-n08I+)Lz$6kku8muYcHkvB;ur2(8}B&9fKg=TsyqFN-zDml@@O~^tnzzysC zHJy#V{6PoIh_2H%WZYW#+PLq=gQzu|y>@?MY3J2pV3~S2!P*}lzZr)`v&@IjKc*MK zY@(&I%r0f`T*nzkQ%$)6uxColXX!{a)hA(HOk+F}`~+6T_{N(bete#J5Rnq2z>CRA z_R)pmN8tCBl9J+4iaW$Idv)cS1@QYy*^q5lQzSi|A|Ex&TsK(HyFG`-65sZS5!3uS zr$c5(K3>?hoaq0y(l{R>bHn3TWUf*&b)5=5OnGdFD9hVTqkqi|(q zuEBP?PVccYG&`Z$oUQ}k--QKvPpHw)w*0aGQ{+@X0_15D+S&csDNA?GeX?;x<4L*= zD347kAej<7-@gBKgsGFC%&6Wv5dr7SGjcnMcXRC7zguX}(-Z0uI~H)^2oyPk2c7;e zD)zISF*XzEEr+{zw!^%Y+@B;@nnw=B7C_MiE|Xk|J!IMXddpoRIo#*KKyou}vAl9_ zhlkGPjPvQsmO~u`29gst4>BrhqYUq&x!sp|WB>e!g0{Qd{-mQA* zz!o`|woS>&%qn`#XpS#4YjPy+BQ2tqWj%%5xtfQN6mBlMrCTLE?KKQ;TJNL2M)Vf5 zUN4qd&c28UON}q3CKPU!4I)_&z&g62+qhlm77$I?msN+|7I%i=^lSMH>y3Ju3MW1v zZ4x!$PP=2GJTMm#@)tih6+gH2a)uv(!FHGVU%=>9Y+;JiyPVz%yB=(ea!pTi4>iMj zmb)yKcrpTFp(sr^7fvN^?m~K~(QDEb^G94sJm{xc8tf3q@Iz;g`@{nF7ea#gjKhOn zd4X3LfD;A8$6Hy4y9DUN{F`F>ZkyMa2|8|101qA@qn5Rw^ov3PgMo>5mnB35Tp2*0 zy>Toe^ZGEakzsHpAkrU~lm)RLu6+Q%0stW(dMnGp5Qg?1V-9777!amY8}N4(?sY)K yBua?|96?oSRcX$4$LI&-o0r~ech5imC5oDeAbSa8ZCzE%hkSl?CJGY(`F{Yvi5_VH delta 1505 zcmZ`(>q}Ho5IBwI6tobR16rrYa7FYBp;ZzLf5C#)tt8uPB zhTDp|v&Pq{IIDeaYAD=8V|bZhx4Pq&qBVcJEDd<_xS?dibn}3WIRC(9MvEQ(NLRquvllmI zht9rr0mQX}96tcp<7WgnTsD-$Wuw)|UOhkPZscl4QjHQ+!oC0-pB_slqe3{6us@Cb zIX!J*f0yd?)b3%Ut1WS0H*U;MN20o>IiiF;imLj99o}eQZ1?2VyP0s&n6;vc4Sc@+ zIG4sU_l}1dnHYA#xUnv8C3--Y9widNd~h#}OMI(GdUeLa^Xeq$`UN?lJ8lLu^9M#Uo-Oqj^5(^3wMi)JmIg>XQ$#HE-b~Y=Z%Y|srT)=iQ2XZ9yX~_&%L^BQ(amvuXbSbGI)s3~@T}@5( z-uh5jWe+i`8M>1Q3UaXpr6{J~HvVrAxFO}r^EZNLQj4$&oThbUXcuG4o5`Ww|6WWB zor1Cx+aofRiWVUSrjm+8x_E>%IBqJ-!v{ozflFNoT2@K3!KA4~%;ba(Z00T7R&kB? zA&f)?qno0EPOKa0lYN{^#R}Q_S8y$v%YOl2h32fwk$;fPSdOH5{b{0t68^a*MNbK) rsGoF3IVQ}rqL+uTC^9+}KC~JZtt8UUNxd0$W348{=>aeX6>|As&Djc3 diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_WebSocketPushCycle.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_WebSocketPushCycle.uasset index b3fd81eebed2b929f64596cd6bb36fa8b4bdeefe..73051f54d1704045434108dce6caf244526c452d 100644 GIT binary patch literal 3770 zcmcInYiv|S6rS=B1ySCjC@xxsLc7~iiqHmRAKki0Y0GZQLqfUTot7)N_pbNRvP4X^ zyd?aPi26f;SW5`}AQ(VI5(p15$}fY729hR5lz^J3sen9O&vzf&ZM$v#!V}DXle=LjI?`sZSx#rv1IpR`5oA*S}J&kBbM=%zq z-V+p~ny4?~jf&386WBZC>j7_0F=nWM3=N5Wr27g+t1BFEe`K5F6eco9l z!dR4qVfUnm7$XzSdC71~Q5p3W)M}}n$=y(L_~Q1^{y*CGHMSSltf*|e%6>f-c>nCm zxA%N??L0Py9vCu|MuS*@Mh{b)F{8*`=$@J94~I<-V+V5EvU+kz(8QSq?cZUrllI*F zh(&Y$le?4fql*aJ(s<)&?g>X#F|K=pLX8EOK%)I^=t-4ad9Z*tF1KZBr$4>uH1NO8O$z~jmDJORp0MgFqMeG zvTBX1b~vRRP+J|3k*y(F)9H((1UuMzcp<(ZC@F%TQgUZs$30L(vOarOikdy)a`{A} zmJ71bz*RWZ+a!pRP$xMSP|Xqpl(j>mmx{m8D<6st8}#_2K7=^<#*X2nAk5 zjI*QHhnPj$$HDEC;$OW9gS z67P0wsoU>geH*9eqa%%zlwQVVuG0C$tZb3u8AS04i8auV9zx%|Ro5X$_*d~$U99(o_>X6r&g z&;@p-<;c4TT>Hi{t!(RfgrGf7$?eK*=h(b&|Ip?a$5kMjOyCJ}kZlj1xBGu6{ZF^Y z*vvssIXufVY-WFQf0JB(205f(0BIDsNpgACkfrPEDR+b9@YDkX$>msL8RgtI51q>% zXVRB0hs+2JBA#nzA8Yfep~nqy;$V52ej;}RWF2JE@9_HTp#xiV zd&XHmS2Rq8&R*N8Slo~3GsJe%Tw1y0?!MO$lEUjoFL|S&CcK))b+d-*ZB|b)v%=}e z00fJv&u7RniJKXPNM^OTn4a?{ZY9HcL~{&H%hhg^JJsRz`3Y0ag7zjQS2zT10yO}( z0nROC2;hGeO_W_4k1BFZ%W+Zl>S|6YG|bYDJq=9+tOY)`I)*pM1Wa*+ z9OCOX4^K}4~h#ok2G5$tzX8TsRV2G1$=FQCa=Djy>UY8?3^_gz( zssdo3-$42aCSh`NY9xA3zmZ=~@6Hf$a-&nYc{)27UMGdoe7JDJyDb zp|^B*O?w)flR{Dg!_vu?XB0iQPkC*g&4@@4!uEzLJ-G(2Gy@?#@c21jxxTz&BV zcoOG5x;|uHnzSZN!z>i6i{nFPp*S*8gx+j+4xf8Ev8n0~E>(S!(sYOeIO+}h;N6>2 zdeAYIvy*2Gn0b`!5ywp66K_ugua`2;O<4J2%E+9CrAWO8*SvWtj4#zNF8XfkI|!kW zSlBR&MQi*#z=wx@*in<5s-dtWyTl+S^mjU7s~D>eM0z9ljkrDk!F?vKqmrAl&4_Te z2>q47y_MiUxi7@++k$HoF;;v_EbfCupu9e~!R9iz0W3S+oU`f5gqykDTjgsIK~_;Q zRxvL(2it|^Aw3|*s|qg2hvPr!*urD0xG;DpA?8Wq*e@T!x3Z?QgR9QZfw~yDXIPH; zQBp<&mHmM^rL}IFuvh#}NN5&D)tx%uxvSH<{+Zwr0HR?dvJ zTjS9j-qJ$7VF8Ik!DC@_A#CA!4&*qmi&y{$9LWxGw+z diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_Web_Autostart.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_Web_Autostart.uasset index 385f925f90d5bc59057d9c09679bbe8629b2e099..c466d6ae368d7cd2c64e7ef56a109070a77dd25f 100644 GIT binary patch delta 1590 zcma)6T}YEr7(P=s_tUibx8?8rUDkA25+o@8q_)6PmX!V3=N$II=N#L&WDyA!7}dq( zPROoqYJ^n=)&rzuB2bl-uL^?H>Wf5VTbp;@AK?E=RMzh&gYz~ zx#1lu^GH>f(Lo3qRuKX}@@3?vy<<^BNFq4bw1nuvqJLi}3nsu$!I*}zFl))lw~QW~ zB=vW6>anrNw><0Uli9Y1cT);%<)O=%5c4=_hN{($sb-Ae#$Xv>HV{$(vG*|?eXZ)E z^$9iJO+f7B13rNZ9pL&sbir6UF78RSA%pe$xctHPtdpO%Bplo+tS(!N6;DY z_+1`RVAT5 z+d8@;7As};2k7kbe2By*Tr2zz!mNq_^V_Yz+&*k;!(LMg4|7#YxP= z7a|ra0?&zKJ(bokqGn6%t{L>A|-f^k!jMwebs2&H?xSc2?FQ7 zj29dcM=k-mMdsp3jHgh8F?;A`lk)koT119yNOT$Wb6GHM8LSE44@4Zf2z$trxo9US n4JH*$x`4%Z0)hR4P!!3syAn`#it&HVk;6(%wANs!jPagS?viSMEb zh17_l%39H;Nl~fARH^A|ti=}=hM{V)u#l3chBNmi>P1sni>wgR@P%qC8+h8_Pe{#> ziY{3nQ9eKGd094sPToZ{g~!t3Q0eU1p;^WAW(7-&3+MO?W){r}g^EJ{qN2i?1%(VD zy2fCb{QBLz1$(}8xTWX-kH`7>fuFzE4Dy_MWp%};*^T4ZMc(V!`$x8C^P$s~yLXI! zBsVX)0b7P17&4UK22lyWjpS$g^dj$U@2vb_IBZIYcFow9l`dhRNw>Fr3sp3njoCNK z;yJ(U>2A0%n;8dPvIRW%l__n)7g8eZ%B1;T9+N^}u0(`yNx835#1g*hxMc4dzCcZV zgY_OrNU6nWPI`Z}T$t-HB6;aWy#AHa*OGL98QKV=N3%y{JdaM*=UJLIl7*z~|a<)HQ`VhDYLuzeHm1shQSqFAruQs;`Nm-k}48Xx9su7PW z$trdYt$z2{0D==LTVe>^PO;Rc8fwMLgsQV5GXradm0AlM8{dWjp{S|6_%hqdK0ZJ}k) ze0H7Fox)NtZ>G+<<6ec6c$P9{ewUsD3z?U2Sy(_H-ni)R<&={6mn>XsTpe{Hy=;#*<&sH#hpnb*Ogeth5Wb8!r)9H?is{d1CL!v%R zZ|=yS`(L!$+1OA2Gq&zN?5^IRri&$3=;>;C{z3%QsqE5Ni^`e!+EeSw5qpOnu3Sv} zvd0aA^8;K@ac;-5OvHqaYP8BOZ%aHM*<;OQ$EvsP=UK0EY6!N9$clirik{wo;`0X~ z&gfn)|Mh?E{{~5a2LOAEL0d09e_|{^eR}@9UrzkUU73qbDkX|k=v?RicaUIq5s^{0 zVFFUco~Ljh&DbuWl6Tzuv>`hG!6LKuvJ?$3olwROp%OulSp!|?&isV^ju(4naLDl4*{0}8zhMYz-ZwHElMXcx`OFrg518r#iCA+~nEirTW@c3J`PnY4o;Htp zj*YG+>NTagj)X1mYkjWSGG5{vAfknfpgWD-?<_J?14e1Lp1sLG0f|{hp%FM(ere)ikK-ily>3a%T}{NxEzAuOwe9ypb7S9 zdeH$n%$IE;vLho6v$;4FK`DQrY$jSf>La|(LdP$Cg!l*-9*|R`DYZnMi=6P=g=|(A zz%CFGZnU62>Jb5)Y#`(}DD@?TlT21mqjSJ!DnjP0kM}PAm+k$_J377dkDY`)jsqbB SwVy41cF6Z%{6aNo=8VNK2 diff --git a/Content/SessionSettings/Session/uWebSockets/FRM_Web_Root.uasset b/Content/SessionSettings/Session/uWebSockets/FRM_Web_Root.uasset index 498e32c84a7261579efca1a2d90f637a6a2b5d5f..f5b31d4c906e35b4bc6f59dd18d497e64f4c4914 100644 GIT binary patch literal 4260 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 Arguments) { @@ -78,7 +77,7 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand return ChatReturn; } - if (command == "http") { + if (command == "http" || command == "uws") { ChatReturn.Chat = TEXT("Usage: /frm http "); if (argumentsNum < 2) { @@ -87,17 +86,18 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand FString arg1 = Arguments[1].ToLower(); - USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - FString HttpPort = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Port").TrimStartAndEnd(); - - if (!HttpPort.IsNumeric()) { - - ChatReturn.Chat = TEXT("Invalid Port Config. Port must be a number."); - return ChatReturn; + const int32 Port = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.Port"), 8080); + + FString Reason; + if (!UFRMValidation::IsTcpPortAvailable(Port, Reason)) + { + UE_LOG(LogHttpServer, Error, TEXT("Port %d unavailable: %s"), Port, *Reason); + + ChatReturn.Chat = FString(TEXT("Port " + FString::FromInt(Port) + "Unavailable. Reason: " + *Reason)); + ChatReturn.Color = FLinearColor::Red; + ChatReturn.Status = EExecutionStatus::COMPLETED; } - int32 Port = FCString::Atoi(*HttpPort); - if (arg1 == "start") { UE_LOG(LogHttpServer, Log, TEXT("Chat Command: Starting HTTP Service. Port: %d"), Port); @@ -131,8 +131,7 @@ FChatReturn AFRMCommand::RemoteMonitoringCommand(UObject* WorldContext, UCommand if (arg1 == "start") { ModSubsystem->InitSerialDevice(); - USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - FString Port = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.Serial.Port").TrimStartAndEnd(); + const FString Port = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("Serial.Port"), "COM3").TrimStartAndEnd(); ChatReturn.Chat = FString(TEXT("Serial/RS232 Service Initiated on Port: " + Port)); ChatReturn.Color = FLinearColor::Green; diff --git a/Source/FicsitRemoteMonitoring/Private/Endpoints/Factory/Logistics.cpp b/Source/FicsitRemoteMonitoring/Private/Endpoints/Factory/Logistics.cpp index e1540d4e..7805dbf2 100644 --- a/Source/FicsitRemoteMonitoring/Private/Endpoints/Factory/Logistics.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Endpoints/Factory/Logistics.cpp @@ -22,8 +22,8 @@ class UFGFactoryConnectionComponent; TArray> ULogistics::getBelts_Helper(UObject* WorldContext, bool IsBelt) { AFGBuildableSubsystem* BuildableSubsystem = AFGBuildableSubsystem::Get(WorldContext->GetWorld()); - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - float SampleDistance = SessionSettings->GetFloatOptionValue("FicsitRemoteMonitoring.General.SplineSampleDistance"); + + const float SampleDistance = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("General.SplineSampleDistance"), 75.0f); TArray Conveyors; BuildableSubsystem->GetTypedBuildable(Conveyors); @@ -179,8 +179,7 @@ void ULogistics::getSplitterMerger(UObject* WorldContext, FRequestData RequestDa void ULogistics::getPipes(UObject* WorldContext, FRequestData RequestData, TArray>& OutJsonArray) { AFGBuildableSubsystem* BuildableSubsystem = AFGBuildableSubsystem::Get(WorldContext->GetWorld()); - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - float SampleDistance = SessionSettings->GetFloatOptionValue("FicsitRemoteMonitoring.General.SplineSampleDistance"); + const float SampleDistance = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("General.SplineSampleDistance"), 75.0f); TArray Pipes; BuildableSubsystem->GetTypedBuildable(Pipes); diff --git a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Hypertubes.cpp b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Hypertubes.cpp index 6526d3c7..0efd1e36 100644 --- a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Hypertubes.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Hypertubes.cpp @@ -31,8 +31,7 @@ void UHypertubes::getHyperEntrance(UObject* WorldContext, FRequestData RequestDa void UHypertubes::getHypertube(UObject* WorldContext, FRequestData RequestData, TArray>& OutJsonArray) { AFGBuildableSubsystem* BuildableSubsystem = AFGBuildableSubsystem::Get(WorldContext->GetWorld()); - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - float SampleDistance = SessionSettings->GetFloatOptionValue("FicsitRemoteMonitoring.General.SplineSampleDistance"); + const float SampleDistance = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("General.SplineSampleDistance"), 75.0f); TArray Hypertubes; BuildableSubsystem->GetTypedBuildable(Hypertubes); diff --git a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Trains.cpp b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Trains.cpp index 15689502..ae02fa97 100644 --- a/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Trains.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Endpoints/Travel/Trains.cpp @@ -287,8 +287,8 @@ void UTrains::getTrainStation(UObject* WorldContext, FRequestData RequestData, T void UTrains::getTrainRails(UObject* WorldContext, FRequestData RequestData, TArray>& OutJsonArray) { AFGBuildableSubsystem* BuildableSubsystem = AFGBuildableSubsystem::Get(WorldContext->GetWorld()); - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - float SampleDistance = SessionSettings->GetFloatOptionValue("FicsitRemoteMonitoring.General.SplineSampleDistance"); + + const float SampleDistance = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("General.SplineSampleDistance"), 75.0f); TArray RailroadTracks; BuildableSubsystem->GetTypedBuildable(RailroadTracks); diff --git a/Source/FicsitRemoteMonitoring/Private/Endpoints/World/Communication.cpp b/Source/FicsitRemoteMonitoring/Private/Endpoints/World/Communication.cpp index 78d6cda6..9ec9bd3c 100644 --- a/Source/FicsitRemoteMonitoring/Private/Endpoints/World/Communication.cpp +++ b/Source/FicsitRemoteMonitoring/Private/Endpoints/World/Communication.cpp @@ -270,12 +270,9 @@ void UCommunication::setModSetting(UObject* WorldContext, FRequestData RequestDa continue; } - UE_LOG(LogTemp, Warning, TEXT("SplineSampleDistance: %f"), SplineSampleDistance); + UE_LOG(LogFRMAPI, Warning, TEXT("SplineSampleDistance: %f"), SplineSampleDistance); - const FString& cvar = "FicsitRemoteMonitoring.General.SplineSampleDistance"; - - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - SessionSettings->SetFloatOptionValue(cvar, SplineSampleDistance); + UFRMConfigManager::FRM_SetConfigFromInput(TEXT("General.SplineSampleDistance"), FString::SanitizeFloat(SplineSampleDistance), false); TSharedPtr JChatMessage = MakeShared(); JChatMessage->Values.Add("IsSent", MakeShared(true)); diff --git a/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp b/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp index 1e2b0806..3be5756d 100644 --- a/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FRMConfigInitSubsystem.cpp @@ -1,9 +1,11 @@ #include "FRMConfigInitSubsystem.h" #include "Configuration/ConfigManager.h" #include "ConfigPropertyString.h" +#include "FGGameUserSettings.h" #include "SessionSettingsManager.h" #include "SMLOptionsLibrary.h" #include "Engine/Engine.h" +#include "Libraries/FRMConfigManager.h" DEFINE_LOG_CATEGORY_STATIC(LogFRMConfigInitSubsystem, Log, All); @@ -17,13 +19,16 @@ void UFRMConfigInitSubsystem::Initialize(FSubsystemCollectionBase& Collection) UE_LOG(LogFRMConfigInitSubsystem, Error, TEXT("SessionSettingsManager missing.")); return; } - - FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); + + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.Root"), ""); if (AuthToken.IsEmpty()) { - AuthToken = GenerateAuthToken(32); - USMLOptionsLibrary::SetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken", AuthToken); + if (!UFRMConfigManager::FRM_SetConfigFromInput(TEXT("uWS.AuthenticationToken"), GenerateAuthToken(32), false)) + { + UE_LOG(LogFRMConfigInitSubsystem, Warning, TEXT("Failed to apply setting")); + return; + } UE_LOG(LogFRMConfigInitSubsystem, Log, TEXT("Generated and saved new token: %s"), *AuthToken); } @@ -33,25 +38,7 @@ void UFRMConfigInitSubsystem::Initialize(FSubsystemCollectionBase& Collection) } AuthenticationToken = AuthToken; -} - -void UFRMConfigInitSubsystem::SaveHttpAuthToken(UConfigManager* ConfigManager) -{ - FConfigId ConfigId{ "FicsitRemoteMonitoring", "WebServer" }; - - UConfigPropertySection* ConfigurationRootSection = ConfigManager->GetConfigurationRootSection(ConfigId); - if (!ConfigurationRootSection) - { - UE_LOG(LogFRMConfigInitSubsystem, Warning, TEXT("ConfigurationRootSection is null.")); - return; - } - - if (UConfigPropertyString* AuthTokenProperty = Cast(ConfigurationRootSection->SectionProperties.FindRef("Authentication_Token"))) - { - AuthTokenProperty->Value = HttpConfig.Authentication_Token; - } - - ConfigManager->MarkConfigurationDirty(ConfigId); + } FString UFRMConfigInitSubsystem::GenerateAuthToken(const int32 Length) diff --git a/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp b/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp deleted file mode 100644 index 8c9cd6bb..00000000 --- a/Source/FicsitRemoteMonitoring/Private/FRMGameInstanceModule.cpp +++ /dev/null @@ -1,159 +0,0 @@ -#include "FRMGameInstanceModule.h" -#include "Settings/SMLOptionsLibrary.h" -#include "Logging/StructuredLog.h" - -#if UE_SERVER -#include "Controller/FGServerStateController.h" -#include "Controller/FGServerManagementController.h" -#endif - -DEFINE_LOG_CATEGORY(LogFRMGameInstanceModule); - -#define LOCTEXT_NAMESPACE "FicsitRemoteMonitoring" - -TArray SessionArray = { - // Debug Session Types - "FicsitRemoteMonitoring.Debug.JSONDebug", - - // General Mod Configuration - "FicsitRemoteMonitoring.General.SplineSampleDistance", - - // uWebsocket Configuration - "FicsitRemoteMonitoring.uWS.AuthenticationToken", - "FicsitRemoteMonitoring.uWS.Autostart", - "FicsitRemoteMonitoring.uWS.Port", - "FicsitRemoteMonitoring.uWS.PushCycle", - "FicsitRemoteMonitoring.uWS.Root", - - // Serial/COM Port Configuration - "FicsitRemoteMonitoring.Serial.AutoStart", - "FicsitRemoteMonitoring.Serial.BaudRate", - "FicsitRemoteMonitoring.Serial.Port", - "FicsitRemoteMonitoring.Serial.StackSize" - -}; - -// Credit: Jarno (the Archipelago guy) for this module code structure and the idea to subscribe to game events via the GameInstanceModule system -// See his Archipelago mod for reference: https://ficsit.app/mod/Archipelago - -UFRMGameInstanceModule::UFRMGameInstanceModule() -{ - UE_LOGFMT(LogFRMGameInstanceModule, Display, "UFRMGameInstanceModule::UFRMGameInstanceModule()"); -} - -void UFRMGameInstanceModule::DispatchLifecycleEvent(ELifecyclePhase phase) { - Super::DispatchLifecycleEvent(phase); - - if (phase == ELifecyclePhase::CONSTRUCTION && !WITH_EDITOR) { -#if UE_SERVER - SUBSCRIBE_METHOD(UFGServerStateController::Handler_GetServerOptions, [this](auto& func, const UFGServerStateController* self, TMap& OutServerOptions, TMap& OutPendingServerOptions) { - func(self, OutServerOptions, OutPendingServerOptions); - DediServer_GetOptions(OutServerOptions, OutPendingServerOptions); - }); - SUBSCRIBE_METHOD(UFGServerManagementController::Handler_ApplyServerOptions, [this](auto& func, const UFGServerManagementController* self, const TMap& UpdatedServerOptions) { - func(self, UpdatedServerOptions); - DediServer_ApplyOptions(UpdatedServerOptions); - }); -#endif - - SUBSCRIBE_METHOD(UFGUserSettingApplyType::VariantAsString, UFRMGameInstanceModule::VariantAsString); - SUBSCRIBE_METHOD(UFGUserSettingApplyType::StringAsVariant, UFRMGameInstanceModule::StringAsVariant); - } -} - -void UFRMGameInstanceModule::DediServer_GetOptions(TMap& OutServerOptions, TMap& OutPendingServerOptions) { - if (!IsRunningDedicatedServer()) - UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_GetOptions() called outside of dedicated server"); - - //handle conversion from session settings to server options - - UWorld* world = GetWorld(); - fgcheck(world); - - USessionSettingsManager* sessionSettings = world->GetSubsystem(); - fgcheck(sessionSettings); - - for (const FString& cvar : SessionArray) { - DediServer_CopySettingFromSessionSettings(sessionSettings, cvar, OutServerOptions, OutPendingServerOptions); - } -} - -void UFRMGameInstanceModule::DediServer_ApplyOptions(const TMap& UpdatedServerOptions) { - if (!IsRunningDedicatedServer()) - UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_ApplyOptions() called outside of dedicated server"); - - UWorld* world = GetWorld(); - fgcheck(world); - - USessionSettingsManager* sessionSettings = world->GetSubsystem(); - fgcheck(sessionSettings); - - for (const FString& cvar : SessionArray) { - DediServer_CopySettingToSessionSettings(sessionSettings, cvar, UpdatedServerOptions); - } -} - -void UFRMGameInstanceModule::DediServer_CopySettingFromSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, TMap& OutServerOptions, TMap& OutPendingServerOptions) { - if(!IsRunningDedicatedServer()) - UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_CopySettingFromSessionSettings() called outside of dedicated server"); - - UFGUserSettingApplyType* setting = sessionSettings->FindSessionSetting(cvar); - UFGUserSettingApplyType_RequireSessionRestart* applyType = Cast(setting); - - FString current = applyType->GetAppliedValue().GetValue(); - - OutServerOptions[cvar] = current; - - FVariant pendingVariant = applyType->GetPendingAppliedValue(); - if (!pendingVariant.IsEmpty()) { - FString pendingValue = pendingVariant.GetValue(); - - if (current != pendingValue) - { - if (OutPendingServerOptions.Contains(cvar)) - OutPendingServerOptions[cvar] = pendingValue; - else - OutPendingServerOptions.Add(cvar, pendingValue); - } - } - - if (!cvar.Contains("Password", ESearchCase::CaseSensitive)) { - TArray out_debugData; - applyType->GetDebugData(out_debugData); - UE_LOGFMT(LogFRMGameInstanceModule, Display, "UFRMGameInstanceModule::Server::GetServerOptions() applyType: {0}", out_debugData[0]); - } -} - -void UFRMGameInstanceModule::DediServer_CopySettingToSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, const TMap& UpdatedServerOptions) { - if (!IsRunningDedicatedServer()) - UE_LOGFMT(LogFRMGameInstanceModule, Fatal, "UFRMGameInstanceModule::DediServer_CopySettingToSessionSettings() called outside of dedicated server"); - - if (UpdatedServerOptions.Contains(cvar)) { - UFGUserSettingApplyType* setting = sessionSettings->FindSessionSetting(cvar); - UFGUserSettingApplyType_RequireSessionRestart* applyType = Cast(setting); - - applyType->ForceSetPendingAppliedValue(UpdatedServerOptions[cvar]); - //the above line does not correctly apply the value of session restart so for now we just hard set the current value - applyType->ForceSetValue(UpdatedServerOptions[cvar], false); - - if (!cvar.Contains("Password", ESearchCase::CaseSensitive)) { - TArray out_debugData; - applyType->GetDebugData(out_debugData); - UE_LOGFMT(LogFRMGameInstanceModule, Log, "UFRMGameInstanceModule::Server::ApplyServerOptions() applyType: {0}", out_debugData[0]); - } - } -} - -void UFRMGameInstanceModule::VariantAsString(TCallScope& Scope, const FVariant& variant) { - if (variant.GetType() == EVariantTypes::String) - Scope.Override(variant.GetValue()); -} - -void UFRMGameInstanceModule::StringAsVariant(TCallScope& Scope, const FString& string, EVariantTypes variantType, FVariant& outVariant) { - if (variantType == EVariantTypes::String) { - outVariant = FVariant(string); - Scope.Override(true); - } -} - -#undef LOCTEXT_NAMESPACE diff --git a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp index e70db1b2..8f0cc789 100644 --- a/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp +++ b/Source/FicsitRemoteMonitoring/Private/FicsitRemoteMonitoring.cpp @@ -32,6 +32,7 @@ #include "Trains.h" #include "Vehicles.h" #include "Engine/World.h" +#include "Libraries/Validation.h" us_listen_socket_t* SocketListener; bool SocketRunning = false; @@ -64,31 +65,21 @@ void AFicsitRemoteMonitoring::BeginPlay() // Load FRM's API Endpoints InitAPIRegistry(); - // Get our config subsystem - USessionSettingsManager* SessionSettings = this->GetWorld()->GetSubsystem(); - - if (!SessionSettings) - { - UE_LOG(LogTemp, Error, TEXT("[AFicsitRemoteMonitoring] SessionSettings missing!")); - return; - } + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.AuthenticationToken"), ""); + + // Store token for use in auth checks + SetAuthToken(AuthToken); - // Start services based on config - if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.Autostart")) + if (UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.Autostart"), false)) { StartWebSocketServer(); } - - if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.Serial.Autostart")) + + if (UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("Serial.Autostart"), false)) { InitSerialDevice(); } - FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); - - // Store token for use in auth checks - SetAuthToken(AuthToken); - // Register the callback to ensure WebSocket is stopped on crash/exit FCoreDelegates::OnExit.AddUObject(this, &AFicsitRemoteMonitoring::StopWebSocketServer); } @@ -97,23 +88,13 @@ void AFicsitRemoteMonitoring::StartWebSocketPushDataLoop() { if (bHasRunningPushDataLoop) return; - USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - - Async(EAsyncExecution::Thread, [this, SessionSettings]() + Async(EAsyncExecution::Thread, [this]() { bHasRunningPushDataLoop = true; UE_LOGFMT(LogHttpServer, Log, "Starting PushUpdatedData loop"); while (SocketRunning && !bShouldStop) { - FString WSPushCycle = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.PushCycle").TrimStartAndEnd(); - - if (!WSPushCycle.IsNumeric()) { - UE_LOGFMT(LogHttpServer, Log, "Invalid Push Cycle Config. Push Cycle must be a number."); - bShouldStop = true; - return; - } - - int32 PushCycle = FCString::Atoi(*WSPushCycle); + const float PushCycle = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.PushCycle"), 5.0f); PushUpdatedData(); FPlatformProcess::Sleep(PushCycle); @@ -194,18 +175,8 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) auto app = uWS::App(); auto World = GetWorld(); - USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - FString HttpPort = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Port").TrimStartAndEnd(); - FString Root = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.Root").TrimStartAndEnd(); - FString AuthenticationToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); - - if (!HttpPort.IsNumeric()) { - - UE_LOG(LogHttpServer, Log, TEXT("Invalid Port Config. Port must be a number.")); - return; - } - - int32 port = FCString::Atoi(*HttpPort); + const int32 port = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.Port"), 8080); + const FString Root = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.Root"), ""); FString ModPath = FPaths::ProjectModsDir() + "FicsitRemoteMonitoring/"; FString IconsPath = ModPath + "Icons"; @@ -290,15 +261,17 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) UFRM_RequestLibrary::SendErrorJson(res, "404 Not Found", ""); }); - app.get("/api/:APIEndpoint", [this, World, AuthenticationToken](auto* res, auto* req) { + app.get("/api/:APIEndpoint", [this, World](auto* res, auto* req) { std::string url(req->getParameter("APIEndpoint")); FString Endpoint = FString(url.c_str()); // Log the request URL //UE_LOGFMT(LogHttpServer, Log, "Request URL: {0}", Endpoint); + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.AuthenticationToken"), ""); + FRequestData RequestData; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthToken); HandleApiRequest(World, res, req, Endpoint, RequestData); }); @@ -310,12 +283,12 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) res->end(); }); - app.post("/*", [this, World, AuthenticationToken](auto* res, uWS::HttpRequest* req) + app.post("/*", [this, World](auto* res, uWS::HttpRequest* req) { const std::string URL(req->getUrl().begin(), req->getUrl().end()); FString RelativePath = FString(URL.c_str()).Mid(1); - res->onData([this, res, req, World, RelativePath, AuthenticationToken](const std::string_view data, bool) + res->onData([this, res, req, World, RelativePath](const std::string_view data, bool) { try { @@ -329,9 +302,11 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) return UFRM_RequestLibrary::SendErrorMessage(res, "400 Bad Request", FString("Invalid Request Body")); } + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.AuthenticationToken"), ""); + FRequestData RequestData; RequestData.Method = "POST"; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthToken); if (JsonValue->Type == EJson::Array) { @@ -359,10 +334,12 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) res->onAborted([]() {}); }); - app.get("/*", [this, UIPath, World, AuthenticationToken](auto* res, uWS::HttpRequest* req) { + app.get("/*", [this, UIPath, World](auto* res, uWS::HttpRequest* req) { if (!res) return; std::string url(req->getUrl().begin(), req->getUrl().end()); + + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.AuthenticationToken"), ""); bool bFileExists = false; // Remove initial '/' @@ -387,7 +364,7 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) } else { FRequestData RequestData; - RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthenticationToken); + RequestData.bIsAuthorized = IsAuthorizedRequest(req, AuthToken); HandleApiRequest(World, res, req, RelativePath, RequestData); } }); @@ -398,7 +375,12 @@ void AFicsitRemoteMonitoring::StartWebSocketServer(bool bSkipIfRunning) UE_LOG(LogHttpServer, Warning, TEXT("Attempting to listen on port %d"), port); - if (token) { + FString Reason; + if (!UFRMValidation::IsTcpPortAvailable(port, Reason)) + { + UE_LOG(LogHttpServer, Error, TEXT("Port %d unavailable: %s"), port, *Reason); + } + else if (token) { SocketListener = token; UE_LOGFMT(LogHttpServer, Warning, "Listening on port {port}", port); diff --git a/Source/FicsitRemoteMonitoring/Private/Libraries/FRMConfigManager.cpp b/Source/FicsitRemoteMonitoring/Private/Libraries/FRMConfigManager.cpp new file mode 100644 index 00000000..9c92215f --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Private/Libraries/FRMConfigManager.cpp @@ -0,0 +1,289 @@ +#include "FRMConfigManager.h" + +#include "Misc/Variant.h" + +class UFGGameUserSettings; + +bool UFRMConfigManager::FRM_GetStoredConfigType(const FString& StrID, EVariantTypes& OutType) +{ + UFGGameUserSettings* UserSettings = UFGGameUserSettings::GetFGGameUserSettings(); + if (!UserSettings) + { + UE_LOG(LogTemp, Error, TEXT("FRM_GetStoredConfigType: UserSettings is null")); + return false; + } + + const FString FullSettingName = TEXT("FicsitRemoteMonitoring.") + StrID; + const FVariant ConfigVariant = UserSettings->GetOptionValue(FullSettingName); + OutType = ConfigVariant.GetType(); + + if (OutType == EVariantTypes::Empty) + { + UE_LOG(LogTemp, Warning, TEXT("FRM_GetStoredConfigType: Setting '%s' is empty or invalid"), *FullSettingName); + return false; + } + + return true; +} + +bool UFRMConfigManager::FRM_GetExpectedConfigType(const FString& StrID, EVariantTypes& OutType) +{ + // Explicit schema for known settings. + // This avoids being trapped by previously mis-saved string values like "9090". + if (StrID == TEXT("uWS.Port")) + { + OutType = EVariantTypes::Int32; + return true; + } + + if (StrID == TEXT("uWS.PushCycle")) + { + OutType = EVariantTypes::Float; + return true; + } + + if (StrID == TEXT("uWS.Enabled")) + { + OutType = EVariantTypes::Bool; + return true; + } + + // Fallback to whatever is currently stored. + return FRM_GetStoredConfigType(StrID, OutType); +} + +bool UFRMConfigManager::FRM_ValidateConfigValue(const FString& StrID, const FVariant& InValue, FString& OutReason) +{ + OutReason.Empty(); + + const EVariantTypes VariantType = InValue.GetType(); + + if (StrID == TEXT("uWS.Port")) + { + int32 Port = 0; + + if (VariantType == EVariantTypes::Int32) + { + Port = InValue.GetValue(); + } + else if (VariantType == EVariantTypes::String) + { + const FString StringValue = InValue.GetValue(); + if (!LexTryParseString(Port, *StringValue)) + { + OutReason = TEXT("Port must be a valid integer."); + return false; + } + } + else + { + OutReason = TEXT("Port must be an integer."); + return false; + } + + if (Port < 1 || Port > 65535) + { + OutReason = TEXT("Port must be between 1 and 65535."); + return false; + } + + return true; + } + + if (StrID == TEXT("uWS.PushCycle")) + { + float PushCycle = 0.0f; + + if (VariantType == EVariantTypes::Float) + { + PushCycle = InValue.GetValue(); + } + else if (VariantType == EVariantTypes::Int32) + { + PushCycle = static_cast(InValue.GetValue()); + } + else if (VariantType == EVariantTypes::String) + { + const FString StringValue = InValue.GetValue(); + if (!LexTryParseString(PushCycle, *StringValue)) + { + OutReason = TEXT("PushCycle must be a valid number."); + return false; + } + } + else + { + OutReason = TEXT("PushCycle must be a number."); + return false; + } + + if (PushCycle < 0.05f) + { + OutReason = TEXT("PushCycle must be at least 0.05."); + return false; + } + + return true; + } + + return true; +} + +bool UFRMConfigManager::FRM_ParseConfigInputToVariant( + const FString& StrID, + const FString& RawTextValue, + bool bCheckboxValue, + FVariant& OutVariant, + FString& OutReason +) +{ + OutReason.Empty(); + + EVariantTypes ExpectedType; + if (!FRM_GetExpectedConfigType(StrID, ExpectedType)) + { + OutReason = TEXT("Could not determine expected setting type."); + return false; + } + + switch (ExpectedType) + { + case EVariantTypes::Bool: + { + OutVariant = FVariant(bCheckboxValue); + return true; + } + + case EVariantTypes::Int32: + { + int32 ParsedValue = 0; + if (!LexTryParseString(ParsedValue, *RawTextValue)) + { + OutReason = FString::Printf(TEXT("'%s' is not a valid integer."), *RawTextValue); + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_ParseConfigInputToVariant: Failed to parse int32 from '%s' for setting '%s'"), + *RawTextValue, + *StrID + ); + return false; + } + + OutVariant = FVariant(ParsedValue); + return true; + } + + case EVariantTypes::Float: + { + float ParsedValue = 0.0f; + if (!LexTryParseString(ParsedValue, *RawTextValue)) + { + OutReason = FString::Printf(TEXT("'%s' is not a valid float."), *RawTextValue); + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_ParseConfigInputToVariant: Failed to parse float from '%s' for setting '%s'"), + *RawTextValue, + *StrID + ); + return false; + } + + OutVariant = FVariant(ParsedValue); + return true; + } + + case EVariantTypes::String: + { + OutVariant = FVariant(RawTextValue); + return true; + } + + default: + { + OutReason = FString::Printf(TEXT("Unsupported variant type %d."), static_cast(ExpectedType)); + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_ParseConfigInputToVariant: Unsupported variant type %d for setting '%s'"), + static_cast(ExpectedType), + *StrID + ); + return false; + } + } +} + +bool UFRMConfigManager::FRM_SetConfigFromInput( + const FString& StrID, + const FString& RawTextValue, + bool bCheckboxValue +) +{ + UFGGameUserSettings* UserSettings = UFGGameUserSettings::GetFGGameUserSettings(); + if (!UserSettings) + { + UE_LOG(LogTemp, Error, TEXT("FRM_SetConfigFromInput: UserSettings is null")); + return false; + } + + FVariant ParsedVariant; + FString ParseReason; + if (!FRM_ParseConfigInputToVariant(StrID, RawTextValue, bCheckboxValue, ParsedVariant, ParseReason)) + { + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_SetConfigFromInput: Failed to parse setting '%s': %s"), + *StrID, + *ParseReason + ); + return false; + } + + FString ValidationReason; + if (!FRM_ValidateConfigValue(StrID, ParsedVariant, ValidationReason)) + { + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_SetConfigFromInput: Validation failed for setting '%s': %s"), + *StrID, + *ValidationReason + ); + return false; + } + + const FString FullSettingName = TEXT("FicsitRemoteMonitoring.") + StrID; + UserSettings->SetOptionValue(FullSettingName, ParsedVariant); + + UE_LOG( + LogTemp, + Log, + TEXT("FRM_SetConfigFromInput: Applied setting '%s'"), + *FullSettingName + ); + + return true; +} + +bool UFRMConfigManager::FRM_SetConfigFromInput(const FString& StrID, float Value) +{ + return FRM_SetConfigFromInput(StrID, FString::SanitizeFloat(Value), false); +} + +bool UFRMConfigManager::FRM_SetConfigFromInput(const FString& StrID, int32 Value) +{ + return FRM_SetConfigFromInput(StrID, FString::FromInt(Value), false); +} + +bool UFRMConfigManager::FRM_SetConfigFromInput(const FString& StrID, bool bValue) +{ + return FRM_SetConfigFromInput(StrID, TEXT(""), bValue); +} + +bool UFRMConfigManager::FRM_SetConfigFromInput(const FString& StrID, const FString& Value) +{ + return FRM_SetConfigFromInput(StrID, Value, false); +} \ No newline at end of file diff --git a/Source/FicsitRemoteMonitoring/Private/Libraries/Validation.cpp b/Source/FicsitRemoteMonitoring/Private/Libraries/Validation.cpp new file mode 100644 index 00000000..7e6a209a --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Private/Libraries/Validation.cpp @@ -0,0 +1,47 @@ +#include "Validation.h" + +#include "Runtime/Sockets/Public/SocketSubsystem.h" +#include "Runtime/TraceLog/standalone_prologue.h" +#include "Runtime/Sockets/Public/Sockets.h" +#include "UObject/NameTypes.h" + +bool UFRMValidation::IsTcpPortAvailable(int32 Port, FString& OutReason) +{ + OutReason.Empty(); + + if (Port < 1 || Port > 65535) + { + OutReason = TEXT("Port is outside valid range 1-65535."); + return false; + } + + ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM); + if (!SocketSubsystem) + { + OutReason = TEXT("Socket subsystem is unavailable."); + return false; + } + + TSharedRef Addr = SocketSubsystem->CreateInternetAddr(); + Addr->SetAnyAddress(); + Addr->SetPort(Port); + + FSocket* TestSocket = SocketSubsystem->CreateSocket(NAME_Stream, TEXT("PortAvailabilityTest"), false); + if (!TestSocket) + { + OutReason = TEXT("Failed to create test socket."); + return false; + } + + const bool bBindSucceeded = TestSocket->Bind(*Addr); + + if (!bBindSucceeded) + { + OutReason = TEXT("Bind failed. Port is likely already in use or not permitted."); + } + + TestSocket->Close(); + SocketSubsystem->DestroySocket(TestSocket); + + return bBindSucceeded; +} diff --git a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp index 5502f53e..457c0fd8 100644 --- a/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp +++ b/Source/FicsitRemoteMonitoring/Private/RemoteMonitoringLibrary.cpp @@ -301,10 +301,8 @@ void URemoteMonitoringLibrary::GetOverclockingItemsFromInventory(const UFGInvent FString URemoteMonitoringLibrary::APItoJSON(TArray> JSONArray, UObject* WorldContext) { FString Write{}; - - USessionSettingsManager* SessionSettings = WorldContext->GetWorld()->GetSubsystem(); - if (SessionSettings->GetBoolOptionValue("FicsitRemoteMonitoring.uWS.JSONDebug")) { + if (UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("Debug.JSONDebug"), false)) { const TSharedRef>> JsonWriter = TJsonWriterFactory>::Create(&Write); FJsonSerializer::Serialize(JSONArray, JsonWriter); } else { diff --git a/Source/FicsitRemoteMonitoring/Public/FRMConfigInitSubsystem.h b/Source/FicsitRemoteMonitoring/Public/FRMConfigInitSubsystem.h index d709776c..beeb57d2 100644 --- a/Source/FicsitRemoteMonitoring/Public/FRMConfigInitSubsystem.h +++ b/Source/FicsitRemoteMonitoring/Public/FRMConfigInitSubsystem.h @@ -32,5 +32,4 @@ class FICSITREMOTEMONITORING_API UFRMConfigInitSubsystem : public UGameInstanceS FConfig_FactoryStruct FactoryConfig{}; FString GenerateAuthToken(int32 Length); - void SaveHttpAuthToken(UConfigManager* ConfigManager); }; diff --git a/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h b/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h deleted file mode 100644 index 562ea94a..00000000 --- a/Source/FicsitRemoteMonitoring/Public/FRMGameInstanceModule.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" - -#include "FGBlueprintFunctionLibrary.h" - -#include "Module/GameInstanceModule.h" -#include "Patching/NativeHookManager.h" -#include "SessionSettings/SessionSettingsManager.h" - -#include "Misc/Variant.h" -#include "Settings/FGUserSettingApplyType.h" - -DECLARE_LOG_CATEGORY_EXTERN(LogFRMGameInstanceModule, Log, All); - -#include "FRMGameInstanceModule.generated.h" - -/** - * Blueprint implemented Mod Module -*/ -UCLASS(Abstract, Blueprintable) -class FICSITREMOTEMONITORING_API UFRMGameInstanceModule : public UGameInstanceModule -{ - GENERATED_BODY() - -public: - UFRMGameInstanceModule(); - - virtual void DispatchLifecycleEvent(ELifecyclePhase Phase) override; - -private: - void DediServer_GetOptions(TMap& OutServerOptions, TMap& OutPendingServerOptions); - void DediServer_ApplyOptions(const TMap& UpdatedServerOptions); - - void DediServer_CopySettingFromSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, TMap& OutServerOptions, TMap& OutPendingServerOptions); - void DediServer_CopySettingToSessionSettings(const USessionSettingsManager* sessionSettings, const FString& cvar, const TMap& UpdatedServerOptions); - - static void VariantAsString(TCallScope& Scope, const FVariant& variant); - static void StringAsVariant(TCallScope& Scope, const FString& string, EVariantTypes variantType, FVariant& outVariant); -}; diff --git a/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoringModule.h b/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoringModule.h index a8c3c27d..314ef7a7 100644 --- a/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoringModule.h +++ b/Source/FicsitRemoteMonitoring/Public/FicsitRemoteMonitoringModule.h @@ -9,6 +9,7 @@ DECLARE_LOG_CATEGORY_EXTERN(LogArduino, Log, All); DECLARE_LOG_CATEGORY_EXTERN(LogFRMAPI, Log, All); DECLARE_LOG_CATEGORY_EXTERN(LogFRMNotification, Log, All); DECLARE_LOG_CATEGORY_EXTERN(LogFRMDebug, Log, All); +DECLARE_LOG_CATEGORY_EXTERN(LogFRMConfig, Log, All); DECLARE_LOG_CATEGORY_EXTERN(LogWebSocketServer, Log, All); diff --git a/Source/FicsitRemoteMonitoring/Public/Libraries/FRMConfigManager.h b/Source/FicsitRemoteMonitoring/Public/Libraries/FRMConfigManager.h new file mode 100644 index 00000000..04ff32d7 --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Public/Libraries/FRMConfigManager.h @@ -0,0 +1,203 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "Misc/Variant.h" +#include +#include "FGGameUserSettings.h" +#include "../FicsitRemoteMonitoringModule.h" +#include "FRMConfigManager.generated.h" + +class UFGGameUserSettings; + +UCLASS() +class FICSITREMOTEMONITORING_API UFRMConfigManager : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + /** Gets a config value and converts it to the requested type if possible. */ + template + static bool FRM_GetConfig(const FString& StrID, T& OutValue) + { + UFGGameUserSettings* UserSettings = UFGGameUserSettings::GetFGGameUserSettings(); + if (!UserSettings) + { + UE_LOG(LogTemp, Error, TEXT("FRM_GetConfig: UserSettings is null")); + return false; + } + + const FString FullSettingName = TEXT("FicsitRemoteMonitoring.") + StrID; + const FVariant ConfigVariant = UserSettings->GetOptionValue(FullSettingName); + const EVariantTypes VariantType = ConfigVariant.GetType(); + + if constexpr (std::is_same_v) + { + if (VariantType == EVariantTypes::Float) + { + OutValue = ConfigVariant.GetValue(); + return true; + } + + if (VariantType == EVariantTypes::Int32) + { + OutValue = static_cast(ConfigVariant.GetValue()); + return true; + } + + if (VariantType == EVariantTypes::String) + { + float ParsedValue = 0.0f; + const FString StringValue = ConfigVariant.GetValue(); + if (LexTryParseString(ParsedValue, *StringValue)) + { + OutValue = ParsedValue; + return true; + } + } + } + else if constexpr (std::is_same_v) + { + if (VariantType == EVariantTypes::Int32) + { + OutValue = ConfigVariant.GetValue(); + return true; + } + + if (VariantType == EVariantTypes::Float) + { + OutValue = static_cast(ConfigVariant.GetValue()); + return true; + } + + if (VariantType == EVariantTypes::String) + { + int32 ParsedValue = 0; + const FString StringValue = ConfigVariant.GetValue(); + if (LexTryParseString(ParsedValue, *StringValue)) + { + OutValue = ParsedValue; + return true; + } + } + } + else if constexpr (std::is_same_v) + { + if (VariantType == EVariantTypes::Bool) + { + OutValue = ConfigVariant.GetValue(); + return true; + } + + if (VariantType == EVariantTypes::String) + { + const FString StringValue = ConfigVariant.GetValue(); + + if (StringValue.Equals(TEXT("true"), ESearchCase::IgnoreCase) || + StringValue.Equals(TEXT("1"), ESearchCase::IgnoreCase)) + { + OutValue = true; + return true; + } + + if (StringValue.Equals(TEXT("false"), ESearchCase::IgnoreCase) || + StringValue.Equals(TEXT("0"), ESearchCase::IgnoreCase)) + { + OutValue = false; + return true; + } + } + } + else if constexpr (std::is_same_v) + { + if (VariantType == EVariantTypes::String) + { + OutValue = ConfigVariant.GetValue(); + return true; + } + + if (VariantType == EVariantTypes::Int32) + { + OutValue = FString::FromInt(ConfigVariant.GetValue()); + return true; + } + + if (VariantType == EVariantTypes::Float) + { + OutValue = FString::SanitizeFloat(ConfigVariant.GetValue()); + return true; + } + + if (VariantType == EVariantTypes::Bool) + { + OutValue = ConfigVariant.GetValue() ? TEXT("true") : TEXT("false"); + return true; + } + } + else + { + static_assert( + std::is_same_v || + std::is_same_v || + std::is_same_v || + std::is_same_v, + "FRM_GetConfig only supports float, int32, bool, and FString." + ); + } + + UE_LOG( + LogTemp, + Warning, + TEXT("FRM_GetConfig: Invalid type for setting '%s'. Variant type: %d"), + *FullSettingName, + static_cast(VariantType) + ); + + return false; + } + + /** Gets a config value or returns a fallback default. */ + template + static T FRM_GetConfigOrDefault(const FString& StrID, const T& DefaultValue) + { + T Value = DefaultValue; + FRM_GetConfig(StrID, Value); + return Value; + } + + /** Gets the raw current variant type of a setting. */ + static bool FRM_GetStoredConfigType(const FString& StrID, EVariantTypes& OutType); + + /** Gets the expected variant type for a known setting. Falls back to the stored type if not explicitly mapped. */ + static bool FRM_GetExpectedConfigType(const FString& StrID, EVariantTypes& OutType); + + /** Validates a parsed variant value for a specific setting. */ + static bool FRM_ValidateConfigValue(const FString& StrID, const FVariant& InValue, FString& OutReason); + + /** + * Converts UI input into a correctly typed FVariant for the target setting. + * RawTextValue is used for String / Int32 / Float settings. + * bCheckboxValue is used for Bool settings. + */ + static bool FRM_ParseConfigInputToVariant( + const FString& StrID, + const FString& RawTextValue, + bool bCheckboxValue, + FVariant& OutVariant, + FString& OutReason + ); + + /** Applies a parsed value to the setting if the input is valid. */ + static bool FRM_SetConfigFromInput( + const FString& StrID, + const FString& RawTextValue, + bool bCheckboxValue + ); + + /** Convenience overloads */ + static bool FRM_SetConfigFromInput(const FString& StrID, float Value); + static bool FRM_SetConfigFromInput(const FString& StrID, int32 Value); + static bool FRM_SetConfigFromInput(const FString& StrID, bool bValue); + static bool FRM_SetConfigFromInput(const FString& StrID, const FString& Value); +}; \ No newline at end of file diff --git a/Source/FicsitRemoteMonitoring/Public/Libraries/Validation.h b/Source/FicsitRemoteMonitoring/Public/Libraries/Validation.h new file mode 100644 index 00000000..d083621d --- /dev/null +++ b/Source/FicsitRemoteMonitoring/Public/Libraries/Validation.h @@ -0,0 +1,11 @@ +#pragma once +#include "Kismet/BlueprintFunctionLibrary.h" +#include "Validation.generated.h" + +UCLASS() +class FICSITREMOTEMONITORING_API UFRMValidation : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() +public: + static bool IsTcpPortAvailable(int32 Port, FString& OutReason); +}; diff --git a/Source/FicsitRemoteMonitoring/Public/RemoteMonitoringLibrary.h b/Source/FicsitRemoteMonitoring/Public/RemoteMonitoringLibrary.h index 6b606dfd..33e977f8 100644 --- a/Source/FicsitRemoteMonitoring/Public/RemoteMonitoringLibrary.h +++ b/Source/FicsitRemoteMonitoring/Public/RemoteMonitoringLibrary.h @@ -5,8 +5,8 @@ #include "Dom/JsonObject.h" #include "Dom/JsonValue.h" #include "FRM_RequestData.h" -#include "SessionSettingsManager.h" #include "Components/SplineComponent.h" +#include "Libraries/FRMConfigManager.h" #include "RemoteMonitoringLibrary.generated.h" struct FSplinePointData; diff --git a/Source/FicsitRemoteMonitoringServer/FicsitRemoteMonitoringServer.build.cs b/Source/FicsitRemoteMonitoringServer/FicsitRemoteMonitoringServer.build.cs index 5976b616..baae7573 100644 --- a/Source/FicsitRemoteMonitoringServer/FicsitRemoteMonitoringServer.build.cs +++ b/Source/FicsitRemoteMonitoringServer/FicsitRemoteMonitoringServer.build.cs @@ -19,6 +19,8 @@ public FicsitRemoteMonitoringServer(ReadOnlyTargetRules Target) : base(Target) "Json", "JsonUtilities", "FactoryGame", + "Sockets", + "Networking", "SML", "Chaos", "ChaosVehiclesCore", "ChaosVehicles", "ChaosSolverEngine", @@ -30,7 +32,8 @@ public FicsitRemoteMonitoringServer(ReadOnlyTargetRules Target) : base(Target) PrivateDependencyModuleNames.AddRange(new string[] { "HTTP", - "HTTPServer" + "HTTPServer", + "FicsitRemoteMonitoring" }); // Enable exception handling diff --git a/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp b/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp index 1b6a27d1..ecbfd8ba 100644 --- a/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp +++ b/Source/FicsitRemoteMonitoringServer/Private/FicsitRemoteMonitoringServer.cpp @@ -2,7 +2,7 @@ #include "FGServerAPIManager.h" #include "FGServerSubsystem.h" -#include "SMLOptionsLibrary.h" +#include "../../FicsitRemoteMonitoring/Public/Libraries/FRMConfigManager.h" #include "../../FicsitRemoteMonitoring/Public/FicsitRemoteMonitoring.h" class UFGServerSubsystem; @@ -19,8 +19,8 @@ void AFicsitRemoteMonitoringServer::BeginPlay() AFicsitRemoteMonitoring* ModSubsystem = AFicsitRemoteMonitoring::Get(World); this->Controller->ModSubsystem = ModSubsystem; - USessionSettingsManager* SessionSettings = GetWorld()->GetSubsystem(); - FString AuthToken = USMLOptionsLibrary::GetStringOptionValue(SessionSettings, "FicsitRemoteMonitoring.uWS.AuthenticationToken").TrimStartAndEnd(); + const FString AuthToken = UFRMConfigManager::FRM_GetConfigOrDefault(TEXT("uWS.AuthenticationToken"), ""); + this->Controller->AuthToken = AuthToken; if (World == nullptr)