From 8f9a48fa965b03565a147d9695c32ebc855988cf Mon Sep 17 00:00:00 2001 From: htom Date: Tue, 11 Nov 2025 12:40:29 +0100 Subject: [PATCH 01/48] rendszerterv v1 --- Docs/Knightly rendszerterv v1.png | Bin 0 -> 295252 bytes Docs/Knightly rendszerterv v1.xml | 287 ++++++++++++++++++++++++++++++ 2 files changed, 287 insertions(+) create mode 100644 Docs/Knightly rendszerterv v1.png create mode 100644 Docs/Knightly rendszerterv v1.xml diff --git a/Docs/Knightly rendszerterv v1.png b/Docs/Knightly rendszerterv v1.png new file mode 100644 index 0000000000000000000000000000000000000000..9826e93b5c4fa57ae675f3d234a1bd417abfffe0 GIT binary patch literal 295252 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�j@eFdNbPI6x3KKKJ~V%}SIBgh_Po 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

c|z>;RdzPDubm*j}GaV*y2io{d+C+ z5)`FaUFm&lAgaFRXCn(FV*TfyZVRCm-F!RzfT37$aRB;3pNI?Jcv`#Wvj5r|;Iy&; z6g+uW$8`ELqDmQL>sT$!A2R*%dKT0}#sPKtj;+eU_4$m- zKvd@P3IJl_r!`}MC`bU{S(kkQbcDOabd34*4qiaC9Zyex@II8u=FT1_YebP84`%$- z*>7T-)c~5G=gMl*fJuBFPz*zWpSl#ktE%aA&+)3JqwbHM4>3P$eyT~^V|P1u3g+$? z&y(JpXFfNFL%1HFTk!0|k`v(Fv%p#WG$mpBE|D#B!p>w2z~bTn0Tz|8d5OTFlfFf7 zUBd?M*a}ts#2^gL)2ump0T#}u42|B|*Rp`%I0UO9wzjg+eAQdaV$5hNpYX*m-@8WC zYd`j!x@WtG)S4MIR9l$(K%@K0R`~OLIaI@*{eJ2?z&t1V3q-gZW8#zcGvd=`I%))@ zYoI8pUuLhnz%&Od{t&{wXA8pu%R0&l6PAnR0?$fP3jgV0~!ZO2b{)> zs~|~;h0=<5!+wKT1;Qx~P#vN+pp)hA)_ZdlIVr@u~=;3erlV92K+Y!Sw`>B3oFmEnrj?-!okTnue+kZj(zP&7*`wH~H zsQb%?N~G^xFMc>97F=4Nnvj%@RK5$*seeU~Tj*pO!83=8YYTz&N^Q%#5*wGjL)7|4fOFiupVK)U6Wf*}X+|yTpCH z4}TDA8DW+_Wnist{|KPq&r;NOSkXI=_IcZRX5&1gQmjPj`=_F;Zw+OC!=;52ln(9) z`f#q;VR|Wq2Uhs`nEtkmUJx%ZCxzFhV#Y=10verlcSeYq($)X!e638|q;DNu;&STm zYNO@);Iceq<#uBUKP8QNex}=VRy#+&=%wCG&z-W=ipzv4+0nPIunjMg$(bxchZD@MHl*F&3soVJA5<@cFB1fz6uG zjLuZNRv1-rTsB7fB!8i1%}gd{@Y09?hCsJ=TuGF%+F&9R^?ziAi>-0o6ah)1<=*d0-Y?JXHk5z zJ?A!{OjR5UBrHEToAymW0V3>mj6ZM)s#caDy;#jm1{9!q%LV=f9`f z*8vefe)d{#bh^nYP^h?UomBDZSLc7;lPo6H06%t5)?PlMH^69D_T)>X{55Q}m~;1~ zr`Jzn@Ucxc3NiV2%1a4}FE{-778g0s(Gq>NNCy(*Gg6V}2lq_;C= zf?7b}i8IFca^5!$CUyWBUwUgnU;m_engH+#+72n5lFUCw~1bFZJZcJg@`rjRpo0XUj#0btn&`YyM})oI%qk0ercZ2Pd=-Zhzj zNq9FH(SckSzhyJMp>V=zJzuVdvPZ;;K}z0~?02Dr3TDSIIUQ*WCvRVe5M?}8=iS-Y z49Yj9OH4C8fM1taK9@#u6(>o&3?h}tZ3)-|LgtV~FjjqO+M*QC27JpaX@PaOblRRa ztKaI9Y|QCPIj79TCE$^B!9ZKd^tu6=emQIG01d{x{ch{RnL=!tIgez7U{KUU4mV|{ zV>!v32Tu2q&AOD{WQFF)M`$`s0RR+7OBXAg_D#*tQ802{Yd%|{jC|>w4t8Pe zmC^7QI3vaEw##KTDrp+oNgn_wtj!ygy_n;un|&#N^Z_4DhX;EHlkR*Nxt(2Hw#U8Y z=xl6&9Z23yYP(qKH8Be7dW46(zatseQfR4gZTYSkgX2L=>e^J$m%BP`-X4I1t-dB?(l{Z?%`EC-)7I_PJom-n(euSo-}c}Bf!c{? z8KH-3Y`j$Gj8l*5q?!l{sN^5LL#UQdm|f!8u=m!r9}CxZ(lA}iyY#Fj$uMgzM8mga zuPF%(cMYPNyglg33Fi8iZ?6~0KU(=^`keZ<)RN<;`kdPzzxdvv`$|3e@sjGx%Mdcw3m%%*(Rt{SXAyh zSz#>qh8?LzkdeQF!Ww3ef)zIeRC~yoxC!>vp%t?LFL@BCRn{Uoy4-1`Y5HANZ339AH+lbbERi6-Pf6wu>>#T#v#I+7+LNHZ2?ZZxWol~L%u0lz&S+qeo$M) z06gUcFb!YV8>Gi>auVu=%N;uiu1|eBp7!jQzH@(PKq$w#dxpoJnlk%YJogmlmu32K zh6n1Hwul1Z{72$4L}Ss2iO>@`q98;LH|ltuKyRDgi&EZP14x@*SgPdt&_pvG>o2Dz z_r74HeBQPwtFul#i4aV3!)R^;2c>a4Lf-x-4$4a?qg2MrEqj4LM6E>$Xn#|&D>Blk z9S%U%_(xELOmLB7vU}*0D6eslq$NTP?Ba~$v!3uu{x6dtJUn~A;s7N`1BEag_40t4 zip4{z%jZWxzsmb9tqnVkU;re-9|Ah=V%d&s)z08zp2}->J50R%|L-+?a}^Udr52@d zKB!=Zfi5@ZXW^pTQq~nmW$xK?P=t^5BeVMP z2-N7?5w~gY1(o0^MIB{Yd?CO)B6{;;c7Fk0wE&Q!!rk8W?+lp5oGr7Dk{Zc~G3*_W zj=KR3r=41z_NJ34cbtf+bCc5-9!;|dK|7V;D?##;40wtX0LI^PnZEvyNMup`_8_Ga z=Aq2B0x1aly3Q6)5s5^%X^1aryAzi1<1|+(Y>8DkNP~9|7g;j~q=0sh3eZb;0@E{f z0s3Y%9`@+AT4W%%z$}jD7HUHHb{UA*qV2AYOg}TD4wC5ZJK#X*u{+BWRa{Wz`N$q% zg59*|Oaa2ga}HkK-)!E@xDm)9Tz`AehW)rpub7Rtckfx?4fj1bVl1+UlVk&oVc|p? zlRpCKMh!_T%>KDBOGzHjNf;*>8hIa@5k|2Q!dfMvh6zHdRy^36(Z?B0y!3qiIEe38IM``JeY91{@pus7jbmcK)ebrOnM~* zj|`%Cj=|rgq)CW5#m=>1YFTJeqY9AfE*Btr{sP`hY=(cjJ}jdrFc9!@Lgwy}&{*id zxnp<1);h`ugsvWb^6?srC@7D}a(|1lALLJqCEQk6mEI}y{nJy`>Lg3xLkL5>{MEKl zo$9dvJ`Ng{Z@^G8aVgY;^{lRAyS;Y!8=5zNMGy44`xHdMaby<^r3b-a`Kn5?i-4Rs=q^8HQsMotn5 zQ)B_5u)(4axY}Ys!Gaf_D(6-wBs#6?5ybOp0GLM;b`jh!szDBI?CxF`!?%T*LEkGvL6iU>@ddg=Vdrf$? zr+_3oj4H|2kV;!Mi8@PrkQ@jXB0$iaBY;+qkE2tZnd@Fl%)uYRbnw=|X;+71ntEbn z4-iA$5!d=C*=m$8sM`m?yU5o9=O&^InwtbQNk4h^^~TClxk&LlQ*!Xtsw)QbJfZ4$ z4WyBldO?>-ue#3kqSZlk&2F7{fFqUMLW&wU-W@g;AdH*bQ3f9PV$nd!-w04ZA4l|_ zkTcmjuL|iy#J|v-g--EIvYylXyqUa1=Y~PGV)YI4(*c(4!X!zMf7&K6Rz;%N2fd%| zQ+td_*xddT-~3lxcD`aVlt5z3zXqjQ+YcTw5gaI(M8|w9P#~L*T9lTM8a@!l;}B zkit8L9TrkR=l^3UwlWMibxohg`pMTjQ@DtSvL2;mnZ`_b5W_qG80O3=s!SL^V6>NT zj+xG6EP$Yh5F(tu1Co)E4Co=+To3mqSNsNK88OgIG)G$Yt+1Kb;^;N*n3O&-#*lrr z;zZ-Lgo#}oq#B2PCIU}>W@%A(7*Ig@YTnO2iO**bvH+IFwC8+MYzY%zrc2Ge%H?lE zv$RE5okE-VdhA6tB=UhXe_u{|k;7a1Q~Jo$J-bQnRuEiAH;2WYVflQxk=n|I>0N2K zlSa0Ekog<1E!FN#20mDV5HvMvg}D)V3tU8dKiN22a>zQ01FS$4VC(}TFiV55x~pG- zA0^SfPe!WYbekM;vTYIZb4lIHrlBo0N9m_>$q_?HfnXPM6 zL65UAft=#*`JUuI-bsF_SOA%1I*7G#R>Lz#;I9BVDw>Rya!#}?0*1ENWz_m0@p`p_ ziH{c=ljb=?=v)CDmY)0Av~F5cJ*(3yVOF>Kc%wBR9=DobqK#{xZHeq zG!Q1Q6oa>ukRC4mfsS7f%j$7mY6#ZqVA{A0rq;`;<2H>HTtv?(Dxo9S)TzQhkpma zRleC{t;8_Mja-VVU7st=WD$3?1@+J20w516FiBv`wY}R5mw>i6APx->|H6O0STa~2 z4(!s{lB?$odu~4aib#D^y-qpewjgA~)4?viwZv!=IKIvBp(UmyS_>)|%wSi@$3BAI zd@^%yZq(7^eRU!Hs@*PvVJ@j{z4Oh{FsFU(Ft{|sv-~cih9TYgg74NHW-knb6b#qM z<#JQI(59Wja1~rOT5JYgAG3=)q7$K&+~r`fv#$Km50A5Y@5nAeN?)trGl}Ap@6Efi zGFU#45j`ie018m(!m(>UgWJ0#30*Q8WN=Uy%Q<(S$7h<~{17nT%xrk*iA$-$X!lWt ztB{X0Y;s+CVq1D<{!AjBV1@G&v#LM)sypoN$}v}E*A!;cTY2<;z1I6Xq%SvcZJ_&W z*m{4NLrigVwZcSkjcI;m@!Rzm5o^AOSAOqXS&>+|5CwN1ees;KI+RW)F6aAtl+&v` z=$T>c@w2qO9d)}?f^|X0FYb8Bvvc~t_=(Hv@9zgU*y>*@24LI0BHmzAa8%&R7OCnS zrb`~3&v8CxR}i~rMRfJ|w4Z+G`}5w)>r6}6a>wNw$KO5?ZP~}~y+X|c z4+Jm87XKR!EaE%;|3mpN%3!i=Jvp^>YfwtFo8_sTT- z^3qNszv`K2h}S9XC{2`0z3iel?<{stT+Oa|QEX)HeWuLF z#rvpMVKD#UMDcj{pL1#Q(jLKH6k&v&H$XwD(>AfqhOL;#%&IVY-sECo$$anm z!j}2bs2hLvT(|uXzudR|U0?~G^Jv4nBecTj@L7I%>up4v2BE<=RNOlE+e#X$@2uO% z4HV4&{8yzHjVk)QhFGo(id*MNBpB{Vp6fAH@cj`UMSp_p{#B_PwiURF^YKADoLVEq zgXu}P7ZhM);j@aYcY7d0h=cc7bGzr5U}jhNc;bFox#p>)bNJ;_p5iS{yZ|z|?Wj`P zjzjQ2{eWy+jzR&IU4rf92f@!@5oRyot*QQv8xkcL#m816Fz%zO_ z@Wr36kbKCx^}zs8^}~2FiXiMX7x{}_*)lGFDH*e{(J$p!DmOB?2w04O@1~L(dn6Kp zEV)5NhGI=5J4o?5BX<$pyt?=Is!=_e6igv8PwUh=IrNg&NPv%pcT$}kK8{t)BxUB| zAK?f%iLsSup5vvBZe}jU=aQA;bW5|Cm)Th7-GEO+n5FPoh|WEK`QuoG}(Qjt+za9_WH67JvHXLUY_ljwa2`=UTyV&hA5l!Kl7mNIC!5B{<=z+;yZxBzO(`=HOQa z%V^;X%bTjj8Hq3~l3=9b&I8kO*(b#sQr zU*pB0n0pBJgLn{6!%Q_}4JX0#`yE^6?<>DGM1E_1CCvnAJi;rQC*HWw2}|itxyaTIDV_II7PBGtgST0t9RjD4 zk2O4!@g-We|0HEe4EJClp!JE=oQZ7w$$@HK-+0X=*&Yy*YeE9TxWj_++u?yR1&qEc z>q~<>puS1+OtIiF;()sjNv_By3ZMOs)ZB!BN*Gb~mp}}E>ep`w5)zOU0+OW9g1Ba= zqR&+nL|RSy$E+Y^7y`nIXF&R3nz#e@cTkLc6DAIysziHzI_1_r z5v1yInH~>%jn+xtlTt+S5Y+4dsrO_-r*Aizb#_=c`BzA%18r}^&4vYa= z?I~_T{U?1bskdQ_vv=$ZI;%Tq8a%1P?OFy5p7~in+3!U_5`$aSWPi0P&m*8SNcRz`RvF(m)|4M+_DGKeFGJVfEDXS;?)J=YM!PQ z&hb^yv{VzSRsFRc|M&-bb+Xehx1S&WoLUe8aS6e1^~d2M2tb!9j<*;l#rn0u6J zwUKFn*x|7JdEoIsgaDL)LSmgM>NH&H^p5XVaCUCKq+!{-4&2~k31(s1kFJdR7_?5W zm14HS z_zemz2B3KN`7GZMl$YHr8VrN^$2#*xuMJ#{TagStjWo?0nqN#eC{-`yKm8&Cxf3x^ zMkql&2k`L0rrD7;JnZ7#bB-JYP`smIn}AqeCN%DdSV3?dR0+O_f#lly}coeWt06M3?^n-I$J_nJ>J_MUU5`g%UaP+SAuzlcZ zIRt&!zl#`%6}&r!Bucn?J)>emetpR|eJWjy5}p#!bX7mqQcx-86xVFcb|u=ca)G|Y z7l@34D^a91UlYPLHCnW(18oWRE1^nvAw5w!A?#@LF4T>)4)TW{>9yZ(?$!j-&PSUF zxgn*P^|h4*XskChLI8Q6D$V;y8Vj^jD?|6Q%H`D>-TNpO>`@!?R=qOP+%f9*xns|U zIrRa=6~~{RHO{b>SO6ksM0IG{^~E15yi5J=jYn0Ck1h2u$`_xVq>ljF#!DZ#VqACY zS+PKbOy#xl9M0pH?RA^}g5pWApLBuDL?Mp)M6}0FDbd>5@~sSl2#EMszl|Ch4%I%R zPoM=;>M_wf0BYNvX@aqURklylzhe}gB#gI5eZb(M^8aJBBzxrgK)NPf4}H^%Y3``6W=Qe9-#I71hYUFd#D+C0^JFuLB@QJdShhfcANH~!EPl}yulkKQ&TOO z2{B&1>~}a%d<-DO5y%Rmc(T=UDaeAU0hRUjC;^0e-ga#0v>4h2@abaK2m}!*JLuwnr*6Th1B_qJ;d^VqvO;3ySy)RgBJTwk7J84Xxi#GywbjGFFuzU8=BJF!f1yq_vl%>tv ziFQQKX?FN29k_7nsTeVM_m!IClb=T}mdJsOM@F#XyL&v+hMsW!4gun^nNc_m_adnB z6%q{mr!UQ}0f*lR!Tuh;IZ3Vw zvKXN^IxCnvIN|{!yJcLP93CeQiO2{T6*yaXPlzLwr0AwN7`_!rJc)1LwNLCWtH)VQ zkDs88Y`8eI`m2_P5}LRoWC!aawH4Od=UAHxF17pw+K0#BXMg}EwsPOGkJjrSIk=|< z%i7LFOSEwRIoL2(f@yAm9M?tYg?A3xY>Z7qLa@`$2S}EZy2>%216#>i0JC?MGuQ;U z$#~E^ZUT|JM0-x*Q%oF=`{iaMY0qPGe)16NY*f{V@U$nUPYX~76Ffqpf?Sp64G)l% z0C~Kwj|A~XwG+6junom$Vk7R_NB>6{dwge0;29JufQUzirWkb4eDMU@HK1M(hs+Z# zkOvi4ejuMFk7Bo6Td|EQZ&LPAkir&o>1_`^DEvB@2WnfAsF&o11UN+t*Lu@{GLDI0 z1wM`GRVbLDJJkm69(%a1m}8R7F?iR??>mh=4R3yeg7R32pB3)6l2h;)p!=9^k02SA>I;^6L4foe0Llt zIhHU9M8z^de_ljFG5Q&52mZp+5}>x+{~Xk|mO90Bi@QK4Z7D&3JvEFu-|KI0q`~%OF*tY$fJLu63RK2cB&8*6g^%C zJKnJu)CA34GhbSlueuYlP-v}O5t|3iNGI&WI>)>3&d5bWqoQgBxKoUcZ0EuGlZ-R> zh!=EBh%?W5;tso>07{nx&^V0;gmAo5LDjnsE8Xv=J&!_QD^q`PV1)`&{vy*M(pLUY zT}*n^U@PM!UgH-YL6?JxfQ*O;`{*lmdr09Y7-}e#=aM7)O)Tf0v*aS!7G2(W1XJ>^ z`XLo@z5OF#34CU$C6H;~6pNfoGg6{G)*q?K1;H^cjzmz0<~I;PTR9MYVK$gRrg5ju z5c0HGgD0ctN#fj2M?ro*!r~QC=eGgGoTCpF{EP7@(r_Xpt()OJkraMpFX}ja>@H8vUl@p2Y$D^Gl~i!XSv^F<;&c@qYs5 zATX0?oV?MsT2y#|6o&3?!TvD+ND6RYs=~=v^Xb5{3Or?9JSBqd;Fr%wl)&U51 zGc>k>TUmHWkr?`%EnM?4d*;O%9$P|9}nB}rWQ-44(G@>Y|Sx$}YGaWLJe z2>M=Z$t&mnOAZ8VVRMLE#;9uD-lH&U=FW*mYR5pK)wXc`}Qk$HZvaZ^Gh_IFV|O;=byc^_%Tk8!AtifA1>{x z9luITx0UHp6M{wk`6u%laoeJK)S)3SA3y!y<{*XC-V+tciB8ox{PzFa>*_uQTk$RP z|C)SMKYb82w?QkE4__(i`1^5lFOY5fN`-Qc6WGSOYt2?9{Eh7%7*MDiH|@Wi`gST= zr{C?bEY6IVw_3!EUv=2|DF!v@K+k-RRwC2%IH^E|cIgT7C?vjIbR7KwbHI=CEvLFS zYk}xH)QXD#bf0nC$o_0PE-5K6I%@Us-mqAYl z0EfrU7JKLLdt@8Q%#1>=#4{LROY==Zr6ENBC%x+ewckBj3zSytNli!-b|)lEh=9QLS_&h>7&paCoq2vB?cApDBsW zyru0%=ba4B$$xZkxrv&P1X+_up;FMg!K{R3JZ?QT`lvNFuDBSxaGg3hd^EZ0?LtLJ?JVRi2w8m z`aKLmj|sIZoj`lNvr{v&q@@XgiB3~%-M_UDo?xf_CK9PC!+tGqOj*9ulgieNPmkSc zcY+(kfn%b@8BjMwa@fi9H|RJha*Oeww#~CYZon)REfULz4Wzz1y|VIUqjdga&xFGS zVkJ$?T`zDl_xAdFVNtg5vX?@a?^kU?Mgw3joWVKw05i|?(FK}$%mdf4YP{vO1k!1k$x8~jC2DvN#0uDKCY%5l- zomf7A6!k5#R;*}tEAQ4ui^sE{aY&=$J7WhtHL6xyP&TI;k&I@6GPGESpsvOt2hJXM z03!B16t)?^!{U0pV>j@m!ufxxl4IHN%d;atIKKlTU5iE_n6c1_o5R3Txg6&T{1L|e z(9+@2y?6kmEE(Y_sbU~r?St&obC%2vwMYt1{FTC=AwyTEznw%xKj+>u2l8a4#s6annWL&vWR= zxvzQ?wW`Yuzwx-jcf}(@NmndrlIj5uMk-neHH^8L5|yX>^CPf%v?F;!Fu0N4mqUCx zLqLU^r=%BGZd79*fUNL(DW`qe5bz|tXH0RdiLzHf^ZJBpd3z_#=&k?Zs01Ft0~b>! zV)$&8d*wei5j%@=b_zd?BiJ^0n|_+ z>4vAJ_c&u46d1Z}3UWEkc>IAwUw!_D;XzMFz%bAArdZGO>!tUF%zK$Zxc!up3n*C{ zKGEZ5WPTOJqh5|1F&O|z7pD`*CHTVWOuCb9n5D@iXjWPDH8)F2{aa96$e=(bPFEnr zJ?gVAwE@8L^vq6Y?YszxCC1r%alWGLFm{2xJA{iU%&Uv*S;3zndeOF=L8Io_OU4H@1AL zdQEZ;4ceOiu3V$$8>=&_h&kd6=?k7H46J`;~dgs{iq_h;pyt<2;OGj8!%<_xDUU7Y!lh}u>CcB~6Zt)5aj zAk`RmY+)Fa`P1GNgNN94UW~oNOm{Z8lPTLbx}TZ6pWEJGKljnS4$%ziW+b3m6uZAz zFooT_e{NqtMe7lK?0OnA=gepFR;5$iI)Aauo%uf!rk;%nIf3>*A?p^DE_sAd`~oN; z8byKjHeQal;7E`7(NCLtHQNSaye4-@9 zb{Oz?p2)1(N0;`i`$ciUEbO^J@`MB0so3#)7wZ0%@Rbh37iTAM-RA?vs94mcNpHRf z17@9u{VCDN!(2pi!%=x(JT{vIn8ULpt(m2^v?5MA8MyONnZ(WkG?e$jI{mvAzz2t@ zhQN+b`z~cmto1_m5`MX4X=kY{$@x^2;HJ6SY6~5nfvhY8z`BRxP$NP|2px~6B)Ps2 zFuMS-uYjI0CUA94K*?*C)(-k4IieQo$v&bNzsMdlLG)fi$m3D(fd#0s^=0d(=RwA& z!l_FLtn)%1xS57&N>tu(Bjp1G{l@d6g061xE1n{XuKVv#E{G%&#ieS3tT15SBrbhZ zB%XW7g>`1&Xve^HGLUCeA}IZ;I8H=Bx#7qhFmZjK(l)ORVQu!&jNqVA&jE&`Cf(2< zcx~9y*ALX8yFt;)5gI*R4W0pkAus8s?{Ds!2Y!4c)dpDc3-DWi3o+an_E8&X|MEf? z?vYX`<_(|@vxpL&ccD4y#v}K^*+&4$>Bz2F)lrb|%|Nlz>ACT7RzsM4|zG=zcetP+Env~&hvgV)*2 z+5!1f)zG710+PfFV_8~>qfxxMMuinn>+VZEeOK1~7gWB&M|Z)Lb@aXYiS~OPJ?uC$ z7s-2@KBFxQ8WUCttJofUGkutr3M1}&|Fez~4$hHW8WwKx&eYSpkcCrC$Y!;CxmkwLL&A_=AfTvB%h8G;CX;r-{m&JKZ`-QB$2Z^CzG3Z>ZS(ZI0#F_u)eF=+R0~ zqyy$5IPqR?!to}?o_Em8H9YFnQ<6CV`;2OB9IOsC9pAZt!i}Y7zvrKVGlG>umLn?e z06m)3N*)=U!8rJ>8w*MIw|*-g{noar{;JZZc+vOiI>=0W7lC|y%rt_NGe+G1s6!XT zY3L4DV4hf%Kk6&(0)^0d*eBNq=#-;Tn;5&GG$Y7H|DMw+c(LqQ808MpP#+L%$CEc! zAFHOW8tEu?l)?>=GjUFYI0^!cqTp%r+pSSNP;AH1Du-lO=DdKWOm9ZJ3NPkdEU|gN zPrCu-=HGzt9WenQ+A;_rmYzriWW6o~1oB+l%*ycR~IfMUVSjpU)6@L{>Q6IHm3N=!3?@+@%S#X+AH}IhJ9QuN;27IC1 z^iADXV5k*2&Hby$@&0Vi}CSo4VS*E#q8nA*iO9fC~0BWKU8epyY=-0+%)>Fw!nb(0J8Pc z$O-;(2r_$7gJfjvN9@0qiLu)FKzO%2^A>Q&n)3|wac8#mLfNPrn)SszC@39g&cHoL zy+E7=8Z{*{hu2)BbOPMIM=(MB4({JxZu17;HyM?b`yu8pr`LvqS$QOq&429Pe>q z073-SfW=$Cj$9d&A5i!&fxA;C7fLQYs7b{EmaW)p&`&=K^c<>tQH97sBu6w_&`8J| z^5ZVhKTra2z-kK99=wHE}KmH##*$~>h9{YH=x8MzF} z_2jFdhovRIWV>PE1X`LtIZjREyLLH51DB4}!?;!5AMA4UpfqtV;Mk`HE8fWrW=N+y zNOcQ*wP$q)#q1-yc3z+BFv^D?HiQPr;CfUIK)t2HbwE1TFrVOe-z+lnp@QFwqo5wS zk4@Iz?nCU17YByj(r4zjWvrQEnY#aiiz&Smc&%~AqIn$QU$KT_$8d=di+Q>LlpyD!)?eMjIafuTyN}E4 zYwuctyZmuwr~fd} zeR*uBNw!X^rXK@1_Tdk=5lZkBElI>xP7zIJPPsI8L%lx%HTQ2j~*&F*~dqcN{MA zzd?+19dPXFx(KaQa^Jm9Me=;-#3>L58mSAWI~4PiBm)WisN|+%U1qS}H7xG@r$_Nc z7RnF!SXD}t9b{9L2uSx47$c{qG)BZj>~$@_Kj49Qs008)Udy_~hzQvx@I~<1U1_t2 zl^gj&>;O#BP%sC1kPowKDg;|;>zzbDIY112zl;NPaa-AHnllufLU`Cd7cn%DLz%PA z3puE}mqyuN%?ruj=$jKHTt;j4@pM!VG8_rnl}-RQkd;<;fxwAvZ!2UR_CVz7b;djz z>ZZMxervz1mBdZJRkFpfg*?!;4W=H*x#R-gRt+(f$%6)y7Bbur%rq2;Uw{`~hmcK# zRd_q`Mp0yjTey`nq;c!A4-z1^isFG=^lvt`Z%42QhB9ZarN;Z3_8VyW62U6()4jV+ z{fZi2_GC~#`fYW`{*y@I5x=Pr(A*JB~e&*A>(`vS{M~qwV zm8?TW^acT+vY0y=r=}aI0bPIcfcz?ivZn!bMLbCuCMdGTTnc9$d4bYh2t)N4`#(M^ zO^bjKSZ!`t<=79XwC+UAeju#V4YO$|$d?dI@4Ppn3k_)zIK_KOPv?#dzI|IOwqI$4 z)Pu1VtZcM}dq1g*AQ%`!OpvrgYptK(3Or+Nco0O1yd1;zt~?MjADug85OjujsLo5j zEYvZHBAoYA=o~EKEdgIrjn)h7Z|mtW@2y3wcO=*4#g{Ovc`zS#h)(o~DMyPPh;CdV%rx)Eygn|*M^xPTA<5t{s1R7WRD{8_5*VRb~|%IlwN*%c6k! zKMnTL%Z=9@eYD?d^-I?nN{N`O7H$6x(U5gH>pNTbnWAEJ(1z;|DdO>k>+K=g#%~s@ zZ<`$-(WhEZ!s_j_??+N`TzAK8{tYv&#qL%{ zrOP9GaC4JTf}v2NkvP3&D98e?(CE0(CZ>sgU%YF=GeTB>bn}z5$fU#_TKJDo*3(cb zCD7Pmn7)K=Zb~&s)_k|x+{23O7>adC%q{3Zr^o)%Z{d$8aitaODHatXBBR{?72QVI zr)%GvO1u7GptOatn6K3E9IfIw7{QGjSQ-0 zbVL9%l>k#bFkHEbN+k=RfotxR|J%&(+=>}E&+DzIlo#NMp7VI%eE!yRxZpX`^KJ?v zt=P%KL_PtHnk4-2vlcfl;&b86IbgE~lHJpIgJKPUUWEnT{<`6()H5t zcb?7R1uic9;Q9eF;tg?G(ss7xn2*uKlmQOv3Hh}HM^ zyf#2>4jBN%FYim}dK-%?0hIpI#Yjl3SRuIc?ifY=!^=vi2=*VL^w9=Mo=1_H4Jb{5 z>TLiS5;jlR02lb|ZEE^F0KJVoQ^>t|ieNjp@3=gggKln^gMk{Gq0Kos%L#LUrBma_ z#bhi8Gdf_X-`GEAaKMCBzkWnCD?4E)IFHkoZej!Kq><|i$-zF9TLP~V>K5}o(5UkWFuenh>6fdD_pCQ!u z0+S(AW`QEI4HW3l2JJ6D=O6-I=ElH>LLGtUp&?#3q`XnUG)>2@{CM~;SpAhlVy-AJ z_cKO&o>(J;4t5LjznhaULPLR2dI5v__0_-HG4;TLe6(@&L@TPmNn9N@NdBF05jp@t z1R6aC#NFHh03FW*Z`>GCV7>!D`Iip3Ka}qVb-N1y4=Y3E9S;yvFoiT(KD_RWeZrmM z{7p5$>_=6*#wf14e;LL=$gV!tB%?-e1%{IcZzuuIqwNA`|9+W&Zj9n8vcb(3rFtZ@ z0!|ENu2{>xMdJ&Jb}*@unZ0UWe7?k9oFTLg!Tw^pM`<&2vQx$&`pkn^4aH}*$DXLs zW=X<+JqWc-V`8 zeNKA|+M-*ZwQ}Oc4lCz92g$OE%fGc4xufMBU$rW|wT~fG*M(EGL;nja=z;wwi0}>N z!>anD1ND?5Ow=#$`+X}!jEWb(j4T(8C0uwjQDtvcB2Uwd7m)z&f)fD$Ea4Wh=&N)~PXw~JUkne_gy)CvL#mCJ&VK+f z+-GtO8njDvGjI?X$R?_itMZQ99}y4ZDsF>x<%V(E57ZBLps<}Ka};%XO*g`FL;7*3 zi%rG@)!UIOz!)B1;@y4> z?()Uni-x48LNxUdFWu+KnMsYioY|AjU!(k*L);;alD=W5vfgm^xy*Nb_zQr(fO4v0 zMsS(}1Uh&J0gP}+Mx>Z-U?VJ%&%Th1&(GUq@1#ky2dL4Sb5W(LpP;2>^naAXA znq6%8Uj${Pao`+b@1Y42(_NztCO{IVSL0ZXEj0Nn0}MF-+pC$%1bd;7P+hM`Jr}yG zoK>j|NAOV3P59Z*ZH(o`rd}bB3g_#bsfRsThLZJMj$->W4W495{Jtcgtrl~sHRBjM z#xqcX#8|F0Ic{C*%8-{p)B!`FvKJO|97wbAygwRE5YrWiaJ-$(6P%_G;x(wSFwf|z zOyF}@E?55I`D5=f|D5!@XU-W$Bg(-ittWCJ>yb2+1(2hlSAN77JqV4CX9zqwRGh}q zm07_dl{p)bIq|H!&8dpj#vU>-#g-Fzq7O2gwy>!0{s5GWkTE^K=o2CCEvxi9q7Bv< zJ8tW?n7TpE#rAb6<_JDIVFmgiuc`g;$Lh@(gMgq>o$_-!e7XnZ>%3#}>fQ%F?V@+U zXc1l$?bXo}a;hyH(yUp2 z8|z8d=~w7#o(q!OLa{%K?mqDP&jw?-L1o!-9)QeV1`rcZey#n=b&T!_r*V2cjk4}= z*+W#{5-`X>kWVgooag^+w%2_ zd)PaJZ6>$`=y3U|Eu?JcT&}o=zZx6=UX>k2F{W|vF1BY!HPUDD@#pi>C}Td3eoj4o zBRayiRhiNJC(Ki;XUK=^Anh}Lcw^-`{ggoXded37{Y>!xm_ z+SlTuCp}kv)nd+iE`OO)(FEQF&}Ka=|);7DrTw0K!M97S>AU%M6h7mx)99DLYw<6;i%@sWIsn%*n1 zrJcqAvN-Gw04ARECT*V*WnAhbISiqiZjfv`(X{Efc`y(jcOLo#oA`fksYH|svH%DY zQig)v;Mg)$((<5MDJ0n*>nZ|BDr{!Mt6RIw71hq6uGu#(LPgyfVJ1eTUX4hn&L(E9*ADhvbX}Jl{=Qyf&1eZT_8q z3kz^@96C~YY+{ehywuJ*Bmvj*|7!2c>X(;{PQQA#RHDA^+1*9V>Fci;E3{q_9yoIlQa z&8b>AZ%44s zFMbDJr%Eikjc2qLUZ}Zh;~?s$v3pzWE>#u!SXYf+i*uHRSmd|m&3JMmp6u(%WR`f` zZUv6GcLAR7(14&KlWz1-YkVT1=Mj%} zYZ~e-Xp+EA{J$-q2XFR@~CAn$ZtL6S$XT=>rZBVd3 zY!`tdgVD>5X z9NU(!#OiX0c?iR%IkpYrg27t&@h7^UE9(i3pjehQX8lPmi}SX&6x742Qv^PwoMFWx zFU&TKg`eY8atf9rEWHEs+}{Y!_9hz7{QRErH$M|<$X>P%YNtzx*gSxlGmHeynJL`G z?anas?aVzbr_bqu&%RA2sj|@=o?Zjdl<$IAdW>ZQH1;3L3HoRoCMjOeeo= zus=tQauh#R%TYcuWZQWMLU>YotD=>)FoeLy`VC-sz2*Pmp(`wC#w|omy(l&1EQ6ja zv`Cz6nVpPhi#z@6Q4nUXmCJw>a=kAFb9AwRX1rC;Ca9Ue(QzJ9Nvm0RA+H?8lOfJ+ zNv+zgI}2_Dk@K<+vyFIFG&4hGR};*i(9^o2A=RSKE~AA3P(S4@FJ4ef@pD|9XxBjP zdJ5L<6U&1R($p6VKJUVrsQ)9CL|kYf0)P;BXpUPHL*x>6^X}~-aY@DQ0GYEDjCRE5 z`e2yaf^B<=0KP$-)&%d=yDsB}+A9~ir9ETuFsGYu4kGh8pRP0Ci5*dX)Sax2P44S%pO1yUaF1de%4avpOxPqx$C6}be?DxQKxo6Zd$L}B8-PXP z@v<(nwCvp(1k&Q?|B{k~I8+`$*PX=yI2$sjqF1Vh0;ET^Zq8Cec-7Q=>j42tHMo;Tg*JMs@_y;^wXj%>GmId;YSi%rwlS!yG-0~sylX8q3egr8TUT|EN=C#zx1d4y3CEuG#(pjb&qf&k%8gh30daRd}nQHnN&C5XQK zz#A<8uxt`EI+Qw#)7h|uY-O9yE+GhJJ29~3%KQ>S;F`OWq_(0@txh^X6A~irPn`9) zUY!*I;-GU^ZKT%ZSAiq!qVe$|@qgI^<(aq-jd=e8OqTV?qYfw^ZZF_;g&>hH6ckq> zhbc6Zd&_hoqmyEa7-4)ZA;EbP81hTXLY#2McGVp1 zfq@J8)%HJ~;u%`PJ_hF5AFzyy3l8(i8fE2ky`_FKT(%AW_=6yQMMPXku$q8V)#rTK zd?75O7ng$E6r`Em34fu*w_%$GM{-+M7wGcyqB7!*gN0j{;;)i$E)n!Ju8`N!Yh2?A4%S{{9#Pl1o(q6i_H?_@dAYbx1&Req9f0 zq=6npUm~FCM=1WZIjp;zmpuos`z~nX@)0aIeH>&&{jfPw-hGA3yX7?eMmJc{IA@Pi zdu<^b^F%+|+gb`;H@x5fCJ;(Z20-9_QB$7?Fvt2m5652tB|m7K(uxoKWPAG)*Uv5v z-xzwh;^PWM8~N8|jKKRxeY}vkFEXRdWq1CxjHZ+i|MOQf!rWHi36IP$=Y#3o)4o8| zLiwE#DOIKeZUf|C{{Y3XF2S@6t~5N9-d6s6$s}|u-Z0If^!1_JPmzE?O3n6b=t`rT zqd6B3l|nzb9dz8`Cy0ljD>EVJb!od452qaxMB0Mrp@do_`6dv0i{o;SKz84w*Z;?I zg)+Fw8&Xnf)uF-ms%V1bQ_x}pulG)`uLQ*Z;(hM74qaNJ5bk8gkq+(gst&!;ptqfy z7unMD{HN-Ee2tueZ@GLD{s$yVxc{D_=k>NW7s_JOqX0UEKiSE^GF4VsGa5I6@O*4o zW@ODf2e2g8%)sUY!t~ou1Wll*7`+v4t!1LFbQY(NQ>=9g5P*8l^cfV|2ar{?#L4&^ zOC=S&s%0Kw{Wp+IT9%F&^B?L7c*z}aw14+?tJ!YD%_BeY@ni~^D>dUueSfY{jv`J0 zeQKKX>9X49?CR#XVsb)UN@Rii91L*}mL=omb2~7!CebHtl0i~*!Sf4hbs{UA=vJKw z?MhR?X!){2o-aYJ!$C7`8j-Eek@gL(aCzTy_wlWWF)-Vgzj(gn238-Z12eG?Lh+O~ zQz+|Sz5U9Y@Ub^*k339R(Nm&1E!(+qf3;@qF7;*6*gH2Jd3W-$sDC#E zmRRsvJhSFZR-xJ~E7rGNSc2&S4ll(VD$pXN?d(&B}D@x*z*(*hB; zQc_Yzc5?z$|F2;XTy=Lh`0+1(#TKXSA#MbIcq^6YtML*0wX`^Br69Un%uBaIPTAUo z%8%hWr!3<)pL=@IFwD&QJsaoXNU(;2z}N)mk0;P}O3SGH*Z_-ljG13Vr5AM_;BAr^ zw<`~qmc9D{9dRp&y3!roRY{#jx2@T58D!a6fI?Lq7BqYSubUIu!(%FI8PxPqZkoN?(hLqAj?*7+d4x~CibrZalOfejEX(h0>bi3xg%r6K6{WZ6@rg&^vD`qXKO=|s$W_C^NLR)&6VD; z?ZHk!6+Td<3og>L@5_?_`4*h=uINTL57iVkrZqwh&&}894I+^OmZd+q* zU?c1AS>tQHgzdhFu%}zFy-~G5nKz-bKi&V-ndQWl-5)(9m)uit$Xj0hq%V6yGb-mA zo!}(4Uv(GG8K;{vfc58vY7{)q8s@-qp;ocn$i%Aj^3HqFZxcO#8rT;Rh1;mwU@iKl zA$4h*=cb}1rya$UifAsOdDHn$fvIJUp*Z+AGm|m*%v_q2v};yV zh)C{d(ZD2~=hc-~!45&4@jSce*Ra5PLpakljH-3W4C_zvBh)TdE5BJ&V3@C|MG!k2 zoLGBy)SA*sGO#Lp3t7fbQFVU>EcZ)_Ap+(#2z^fUv!0Q4_;f?d9$P5U$BeX$UXuK1 za_3s}`&1M08QAzcFr-4(xKp7W7Z7v_cfp$((W<~AUw*cRZ#+V0{!7eg))w-L5spV#a~Ppuy8K4-@t zUL#m@PS4BKLS?379Vt0ZWiFiVzf#x)1Na!}Ly5ha?oby-lse>5V!fTRb07#O>uu=$ z5hDvXePXVPSVGh@htuTtvv_es>cp&?!wi1*x9e?%b1BkFN$248s>>zGv2=}K(4$8L zG(c0rKnDGu?yljDg8DpC(c-p(gE00v=tPN~HZALI$}1oOs_$O;#Q%^TjJvwHrr>;$ zZ(59yzH)n`#)P*s^c3^1xTGm0mY7kvZZY3e;3eX=FnB7lI{<_^5^ZB?xV28QkDy4F zx+IZJN^BwQE!T0nNYZEeTJ9gB1mkZEJN zR$PAYnpM@y7#wPJI}+L`MZh~dj}5wRo?mP@qC#B?g1t~1_y#0#H$fVVL_bBK)XY#2 zf@=*5tz?sl?(Czl58nC_8Zk3yhM)XX8riy;R4T2XT@r#=0L79SH!-YruYy z^6@4poe{%mW$%-Y=mEs&fDY`tKm7^4LspYk`!G>)a0*#3kxWl)vGi3C8NGri>{)sb zvO!jF4&cLf`@}j`hXH?d6Li|?cPD`ix^a7;^6_AcJLnG&B$|w#zZ4`SlLu_fx$YtF zV_PeO{VqabXO-@=2Bc6okm!DrHvA9_k44bnAAPKQYh1Dh!hXhT;EAkPvpxT=QE9@p zucxgf(+T*~x<5%$myTxpV7{$dxAP>(?6jf|Lbdw^j_PLQOvDusDxwQAv!Vch0f59d zeU#@_trxC$(-&&!8-P@72hZS%cy1sxgiTXbfCt1U%tm(An!p|1ZYHu|7Mg&II(6$F^j+6|s3 zz7c11AZ_DgEx6bE;m~sS_#?(O(m$>Jc{oR^;El3!_HF^tOMyK!P@vk!Z$2@8wIkaf zWo&@wGrlF?u};+v+>tsrhSLG-dH^`aUIYL&+y-BdsTDJU?{)-iUHftVIO$;nrGr2? ze$d|wA9yE+kEMWPNOKFcGB-VLAFWu&`AJR2v%65tSzz;^9!!V>l3@@@{gC%VcI$3z zV>VrxEJaR-TY3T@6YiKE6*~a&TDJg#8CS3&=z860|I8n3nE_)^>Hsh!zf=uM1L%I8 zS1F+T7mEbPI3iT%-N`LWZt)E1N=`!-rRG#AxL-%4wnLbaimZe$fVsD3JfaC~Nw~=5 zxC93rYr^SiBG_s}6=%Zl-9#a1Xy98|Z+`Aifv1>bNyR6*#0UpuDsfLG<%te#hAsTy z_}BNKqr6TRFh$Q|eN4yS{U*B-v!>U~;k?1OVw^gq%#--CJ-yG{$3iKexGH^%vk*u-o zxD`)#e0SLD#*`=i08UltU8YRYw@#WJ8(XUfH_y)j6Ycr1BLWA>jYPvo8e(5Qw%Uk5<9 zzd{r*PqtnhDU`>`<;BZDpnmUTG*+K>2H)skgL;G9)nrSJ&~0qpiEx_kW(GF@E4Y0T zaOq)@XWj?ZX`eh0#!%yL{*4J-`K$4D7>e8&q!QYZ8pPL%hP?@Hdx@~;K3b+*_Jo6! zl>fOnaaAGVXPS;{=a3CWgedmGxPYoF}~jZm%!qeF(8{Pq-{thadpt?LV* zNS@c?K*h*bl8|HspvgHWpHr*AoRxflEt=$x%0jEtr1Cs+>6f?FuLV)QnHn%I&R_^y zjIicdtiDKYtwt;%UpMo_5EJ3MP0>M-m&pYh{Z?$ zg9CAc?N0U4S1K(wjS8es8Xw6cet^k)1AJ#Y7RbVr4UG;VR7zqD_9y?DMGFv`g=6UZ5gnslsLhvRLj-})(>%HQKSfdWUXMK-#3q12T zv)(NNs&Nq`LaVS~6gcg$EEjR{mOmTir4Ons<0iLe$>|jcK*{~oLthno)18GAblqfd z2WC1n5yV^{zzv$eC5o#8D&@TH;!lD_=fFu^8A2;s`OSHuo4`h_Hr2N(?Yx$O_>$PZxiiZy=wR=C&i!@5wE^0_j?2eHq zhIe}_5JON-Qd2U{Ray*toF`HSLhF%GCF{?Pp(wx{X4VWZl9!2U2}f{iilFnsnJ`xT zryQ=H^%h#uic9CS9gn53vL{sT<$jJU;vKGa$v1bK0oqae7V(Roe|Ngn4=?Hy`rPU&B4(|Wv z4J$tt+%GPWm0G%#fmwR{uKX;vrv@K(U|{w2d2Fv1LDs(?wGFljdNOqU^QE*LPwDqr zj{bD_)X|wlzUkZXK~II*WHX6H7eK};sjq)%els*zS|e(as-_iMz$-$~BYWl~(A+<}R);(JJKq3Q^93YHhAS97P`%D& z-Lz&wf_@!T=It@N=v5=YK8!@)U@$;Da|1U2hR=naCFCMA-6{SU7fQjpGxvLODl-3y zKLw7iQyx2KO^v$|q)2H!%;)SJ$jKr;SuXl^eUOM3jbppLD zz1;*=a+zvUNov4{1zfn?z0}~+&g=6?WTs`d)DhT6lh_?-hc)5Ye0XK9T2BOxyR`jb3-Tne7t$93eWkw@5#Be}tzQGH2jS(p!@v(;*x zGb+vBtok%xsz34+<)o;wM$zySSiMcJ1H*x$77jpiLJpP(p_)i1^b%Th_8tO%>I)1ADFyNlAJdVBj*k=UNHJP>UFX|k-Y&% z3(~frQUF#w#_|eV`~RNmPk2d>fMe2JS&q+piPndR0ClQ(7?W zz)(Q#L6yh;jN=a>4a+-n`bREMtAE3i_IV6`R~rhq-5k($WSZ*&72H8kt+nRbD?SDV z3@oRQVQeA;){O6A(SrI~rqooWc5(Ureu*Kr5`k@@OHC1EMU7!Sz1h^$Bzb#Ob&Cj%C0^1!l3 z8zFT|5|9uQ`Hx|nrHp3OvR7~{N0f87NWyPSy2;a`~wLW$v2% z8~NeMHq&UO_!92h@TDBX-tPeXjg?eJLS1Bf8j#yrRGTwv-}WD=9yK2#-S9%xkk`e8 zmBrxUEOBBO0MK+}J6Lu1dQ=8|GsWMDp}-IklPMCG#2`lnr8f%$X`P(*2(T`P(SFSF zUAV~^<;%a+%nL*$m6G;>kV%5L3Z*C%(DOST5eC;Le;lNP06zf==UL`>TU}mApzQA6a>cK*_s;jen{Vxb#R^~-lf{Gkq@ySmY58G`Y%rFT%@ci;t1zp?)UUU^wQ%*P2 zlGQZ*$)jc=n@!Y3W@=Z><)Ps~QT(4fXhtd$s2yF!OY6NWz7ctgQdU*3`vWeQ7AAyg z-=6`9WBualui73&O+yAlOY4fy*+jGH7sMFs{*8y)yC3XJ_Fc%}SrofXLO_X0xTP*w za3TglmN{j}z-*6%Pn24Gx1jtWz=i1-TlI2SJK0~8@}74zr(goVyjTwk2XfmAn{u$3OxS9I$@ZJeaS@c`%#D@19cXKGJBT#6^l2*!*jzg%BSN%0JZ zr**vEDM?bBMW+T)XhPi82;y0dU`q;vg0baDxYe|l z9UJs4$>;5fk~zm4mak8QW}!ERB=ywQ3hx4RtqK`;Ac#kSI=ToN%$y(j`&hln5Sv2p zBW8lEE`-rAyhZSiRF#+S%(~;!%jQn6^-o^G7=kTG@JNioc_mffG0Pk((P8;@VEWGu z_JN|dM>(kwM5*zh;QDc`#@dRC|I4#WRdqO^C@oTuF51h$$v`4Z{xa);F}@n5`4(>_ zeR&svY~OjMpv@lNL6IUxgVDF^uihj4R%uOMnVjGOX{|;qk&S`cR)+2rE=dd`ebR9) ztwnQ0Ilpt%>enYHtuzj~YHy<>vmRS7Srs9^qF$n9A60p~Oi)WDr+~quvsTtcdTh}v<*ll zt20j9HB>-CMzusC*OND*-vMeKz3rhd_on?Alo?5CHVMsw0b|*jgzWB9u=4+_X8BrC z?e&-G(k)ulHRr%A_8RK;ff4f{Zlc}EeCR+k4`oN^AOqv(KK?~0S=AnIYh1@!h_T?P zPPiJF;x>v9_y2Wx83+WM!Y0NB2N`&78Z8Cqh&Log8wdXpNt?((!~d6HVmJEYgp*n(2=QE-Cj_2AF+y{90mzJuQAX zefVec$Jva32?^91{WBH<_=7?`v-TacF3H>hed>SZk2CQGca)NyP0Cp(<18Rdh`?Yjvs-30C^+C$^=q0H3vXqCQ=|#?N*M z>Sh1ejtL1FA+9gA;gKtN#X0AOSD{!s^8<);ADvzwHV?BEBCYq|cCnl6W%`|(p8;>* z7ki@Vm5BOpC|e>?-}!yp6CmB6U~Ov9k1REVuN>{zzmNByaL^qF06smw_T6^x83hHsP2AoaS`(VfReBAY9Lj(S)ONU>=eCUYL zB&5&_5eWGwk}jZf;%TOt*?YGl*DyH53fu4qw%P?&+OyeH=?ACsKy|gwviT<60G&#o zSnKaeA=@E|;&C*vg|A^^WtZL;jyT|UWl(|{{mEQNjt8?#t?KDw6zXv%5xgXgW*m%l z;;Jo23)gHqa(D7DRE#oup6#(`pt^thQ{e{0o4p1mPU_BKNN(~t`f_jNUy2gTVUV4F z{t@Jpfa-I~XavSbu9r0i4cxb&)nus=!L+JuGi)0l#az@W+%7X4u7=<~)}huRjvbvNvDs;m({IJ1;Z8obaN|b8Mu@ zY@jQvpI_N`YO$bKU}B$PeDiRJDVo%0;`;&B@1WW1sL*(|4NK4)nAidC5DeB>Iy@`F zCPm{t&q7jT;VRyuR1vYoAu&uWH3MR_W#u$mJ|~4}0L!){7Vx~v5NeZrOHE9yXabj~ z4>3u=49844K9ypopfDTI_d$7x^+aRF%=|ohBcYblEQT^!`VtK(@|Q85UyhoBUy^T~ zj4HfenJ9iTY?b%dL7j_Fn)C_%{vzebfF+XpONoaH16xe}Y$hf$( z84a33T+{Q}k%&T|j}fvPg`8azzz^nUslv|NMm8T+kdd2uW=%SeNx5~|q% z0!OQpc^Rw(nSqzrKX;Vd80YD=tYy20K-Fk$fy*Z)pH>Kc;EI@FoWDe>kpAe~=IeON9a7}BBhX{RPAi0#nF$X4LR4(X8Bx{zN z{Y-+kciiRgSrEhg-C@`jjiu2xf$B{{w0Sdl9&}KG!$If(r=v^a#EHS(A3Y<(AWG8R zIq%^qo|Uw67F`jBlou_VvZIK($h2h9&m)7_)-p6?LE)OD&R&s|e`Om;ujhp-aF)X^ zxFsu+_%yGT*%j~0)zIG-Y>h-#Tl&kIj1O8-^?*1T{Vkc3hZGqYK(1ARGHpin78PoIFDQgE==9{#(!5j6B&9LE{ZJvw5iaLV)gn!M= zBSr_6Bo}3ytXA+nYtiq5xbEijVA2Q)wFQ8!YEwb&DXann(;TRD9--h&>E%vhzsRzuU99zQ}2W4jywaRd+P?;07_pBKyZ5hAn=Qe?0ZDux!L@{nR?7 z)mt(A3xu)Zl3lk zUgQn4a`rSsRJqYfJU;a5`qiRk1M z=X4MShSse)Hom^vXra0w=l)gHZg2kBkZHybYchGSQ69;Ed6L>Il{E_sKg6icM!Goi>*5XHp6?v($@9GAnVo&+uZxf*;$@_%UOojtv8kP} z&>Kd$Ml4Q@Azv1Zyj>aj*6zHi5VxgY&2QGX;R<`^qoIBH`EyW(iL+sFTA$j@5|oy; zR+a;lzEEDj5uaSvzv%nyTeiT7zINT^$vk%pPL58y|3d4bfl4=lmRk*TEH1$;RU}&S zgQ2npkkoMqq+!r=HlQR2B+9#pXK*Oz*WG&?F?n$2IMgA?Z+Zm=k_z&q8@?cgpg{O{fkOJXWkCE zM4w5v>5y0}F6;uc>+D_*ZrME$3s?&AWG?~k(*b{Bi#}un4zyQHy_!c}Ftt{o?>h(? zR~ePr9bN(TsxYOf1B?a&n0S_Yw-6e)v&fKAY$Ym}^;U5l8QS*zC+N zQVO23uJYOBl%380C@C7^3bQJenv|_Bc6zM z0tt7I-V>88$7=!yIt2yt+taULH0KwPh3hj{Vky|sCmSSYA7Ag^P%(CusWTs1B=H;E zHFbh|09cG^1jZJSNCq*m>>*@RI}-W~i7%{cURDI=wwX0*8d*2JEMquE&%(J>Zv8W`n#|W$zJ48U~~5M=B0h>06Kx7K$T7@QDuiWIYoJ#GS!jV683!WvO#jh`;?cG@>RRCQAV9 zw+}eajLdnO!tr>teFL?l;54sNonxRSdK>!uCi!5kMAnl#kmuz8EhQk-&i%lKGqZwf zO*ruvqR-jQ!WqC{kq96_7Qd~4Jok+idQVXPx48~#)$XrdZ#BOTd_k?;w8FzLiy?L6 zcCalP9bldc|I_=&igmNc3a{PKn;vYm`iy1&|4;gVbe_gL%D1bYIlE8f=dr{1!DWH7 eY8rv)wBqM|i*}}GNPbuV|B#7xgkp=G(f + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8ffbfdc63f49ed5f285520499fe8782ba1cdc5e9 Mon Sep 17 00:00:00 2001 From: htom Date: Tue, 11 Nov 2025 13:35:34 +0100 Subject: [PATCH 02/48] basic listener implemented, addedd modules, working on handling connections --- server/Cargo.toml | 7 +++++++ server/src/main.rs | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/server/Cargo.toml b/server/Cargo.toml index ff06670..d37bf87 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -4,3 +4,10 @@ version = "0.1.0" edition = "2024" [dependencies] +tokio = { version = "1", features = ["full"] } +tokio-tungstenite = "0.21" +tungstenite = "0.21" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +futures-util = "0.3.31" +url = "2.5.7" diff --git a/server/src/main.rs b/server/src/main.rs index e7a11a9..cca71d3 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,3 +1,33 @@ -fn main() { - println!("Hello, world!"); +use futures_util::{SinkExt, StreamExt}; +use serde::{Deserialize, Serialize}; +use tokio::net::TcpListener; +use tokio_tungstenite::accept_async; + +#[derive(Serialize, Deserialize, Debug)] +struct Message { + username: String, + text: String, +} + +#[tokio::main] +async fn main() { + let address = "0.0.0.0:9001"; //accept connection from anywhere + let listener = TcpListener::bind(address).await.unwrap(); + println!("Server running on ws://{}", address); + + while let Ok((stream, _)) = listener.accept().await { + println!("New connection!"); + + tokio::spawn(async move { + let ws_stream = accept_async(stream).await.unwrap(); + let (mut write, mut read) = ws_stream.split(); //seperate the read and write channel + + while let Some(Ok(msg)) = read.next().await { + if msg.is_text() { + let txt = msg.to_text().unwrap(); + if let Ok(json) = serde_json::from_str::(txt) {} + } + } + }); + } } From 503cb23015ddb81993263f13fe0e38c154b9d0a3 Mon Sep 17 00:00:00 2001 From: htom Date: Tue, 11 Nov 2025 15:25:42 +0100 Subject: [PATCH 03/48] accepted connection and sending data both ways --- server/src/main.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index cca71d3..2ce3e48 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,7 +1,8 @@ use futures_util::{SinkExt, StreamExt}; use serde::{Deserialize, Serialize}; use tokio::net::TcpListener; -use tokio_tungstenite::accept_async; +use tokio_tungstenite::{accept_async, connect_async}; +use url::Url; #[derive(Serialize, Deserialize, Debug)] struct Message { @@ -25,7 +26,17 @@ async fn main() { while let Some(Ok(msg)) = read.next().await { if msg.is_text() { let txt = msg.to_text().unwrap(); - if let Ok(json) = serde_json::from_str::(txt) {} + if let Ok(json) = serde_json::from_str::(txt) { + println!("Recieved: {:?}", json); + + //for testing the write channel, we send back the + //same data the client sent + let reply = serde_json::to_string(&json).unwrap(); + write + .send(tokio_tungstenite::tungstenite::Message::Text(reply)) + .await + .unwrap(); + } } } }); From 4daa21e8bf2f04646d244df32e50396f37d9e2fe Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 11:28:14 +0100 Subject: [PATCH 04/48] Started to rewrite the project to handle connection storing and message types, added v4 for uuid crate --- server/Cargo.toml | 1 + server/src/handle_connection.rs | 33 +++++++++++++++++++++++ server/src/main.rs | 46 +++++++++++++++------------------ 3 files changed, 55 insertions(+), 25 deletions(-) create mode 100644 server/src/handle_connection.rs diff --git a/server/Cargo.toml b/server/Cargo.toml index d37bf87..2b92661 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -11,3 +11,4 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" futures-util = "0.3.31" url = "2.5.7" +uuid = {version = "1.18.1", features = ["v4"] } diff --git a/server/src/handle_connection.rs b/server/src/handle_connection.rs new file mode 100644 index 0000000..1c2a110 --- /dev/null +++ b/server/src/handle_connection.rs @@ -0,0 +1,33 @@ +use futures_util::{SinkExt, StreamExt}; +use tokio_tungstenite::{accept_async, tungstenite::Message as WsMessage}; +use uuid::Uuid; + +use crate::ConnectionMap; + +async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) { + let ws_stream = accept_async(stream).await.unwrap(); + let (write, mut read) = ws_stream.split(); + + let id = Uuid::new_v4(); + + { + let mut map = connections.lock().await; + map.insert(id, write); + } + + println!("New connection: {id}"); + + while let Some(Ok(msg)) = read.next().await { + if msg.is_text() { + println!("Recieved from {id}: {}", msg); + broadcast_message(&connections, &msg).await; + } + } + + { + let mut map = connections.lock().await; + map.remove(&id); + } + + println!("Connection removed: {id}"); +} diff --git a/server/src/main.rs b/server/src/main.rs index 2ce3e48..7f3b6ad 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,44 +1,40 @@ use futures_util::{SinkExt, StreamExt}; use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::sync::Arc; use tokio::net::TcpListener; -use tokio_tungstenite::{accept_async, connect_async}; -use url::Url; +use tokio::sync::Mutex; +use tokio_tungstenite::accept_async; +use uuid::Uuid; + +mod handle_connection; #[derive(Serialize, Deserialize, Debug)] -struct Message { +struct MessageData { username: String, + userid: u32, text: String, } +type Tx = futures_util::stream::SplitSink< + tokio_tungstenite::WebSocketStream, + tokio_tungstenite::tungstenite::Message, +>; + +type ConnectionMap = Arc>>; + #[tokio::main] async fn main() { - let address = "0.0.0.0:9001"; //accept connection from anywhere + let address = "0.0.0.0:9001"; //address to connect to let listener = TcpListener::bind(address).await.unwrap(); println!("Server running on ws://{}", address); + let connections: ConnectionMap = Arc::new(Mutex::new(HashMap::new())); + while let Ok((stream, _)) = listener.accept().await { - println!("New connection!"); - + let connections = connections.clone(); tokio::spawn(async move { - let ws_stream = accept_async(stream).await.unwrap(); - let (mut write, mut read) = ws_stream.split(); //seperate the read and write channel - - while let Some(Ok(msg)) = read.next().await { - if msg.is_text() { - let txt = msg.to_text().unwrap(); - if let Ok(json) = serde_json::from_str::(txt) { - println!("Recieved: {:?}", json); - - //for testing the write channel, we send back the - //same data the client sent - let reply = serde_json::to_string(&json).unwrap(); - write - .send(tokio_tungstenite::tungstenite::Message::Text(reply)) - .await - .unwrap(); - } - } - } + handle_connection(stream, connections).await; }); } } From 4123a710cf45ad9ffbad9244e27dc1da2696507a Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 12:49:42 +0100 Subject: [PATCH 05/48] first phase of rewrite done, server stores connections with an id, currently works as a hub, next phase to handle custom message types --- server/src/broadcast_message.rs | 19 +++++++++++++++++++ server/src/handle_connection.rs | 9 +++++---- server/src/main.rs | 3 +++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 server/src/broadcast_message.rs diff --git a/server/src/broadcast_message.rs b/server/src/broadcast_message.rs new file mode 100644 index 0000000..0248aab --- /dev/null +++ b/server/src/broadcast_message.rs @@ -0,0 +1,19 @@ +use crate::ConnectionMap; +use futures_util::SinkExt; +use tokio_tungstenite::tungstenite::Message as WsMessage; + +pub async fn broadcast_message(connections: &ConnectionMap, msg: &WsMessage) { + let mut dead = vec![]; + let mut map = connections.lock().await; + + for (id, tx) in map.iter_mut() { + if let Err(e) = tx.send(msg.clone()).await { + eprintln!("Failed to send to {id}: {e}"); + dead.push(*id); + } + } + + for id in dead { + map.remove(&id); + } +} diff --git a/server/src/handle_connection.rs b/server/src/handle_connection.rs index 1c2a110..af7849b 100644 --- a/server/src/handle_connection.rs +++ b/server/src/handle_connection.rs @@ -1,10 +1,11 @@ -use futures_util::{SinkExt, StreamExt}; -use tokio_tungstenite::{accept_async, tungstenite::Message as WsMessage}; +use crate::ConnectionMap; +use futures_util::StreamExt; +use tokio_tungstenite::accept_async; use uuid::Uuid; -use crate::ConnectionMap; +use super::broadcast_message::broadcast_message; -async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) { +pub async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) { let ws_stream = accept_async(stream).await.unwrap(); let (write, mut read) = ws_stream.split(); diff --git a/server/src/main.rs b/server/src/main.rs index 7f3b6ad..ff5a706 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -7,8 +7,11 @@ use tokio::sync::Mutex; use tokio_tungstenite::accept_async; use uuid::Uuid; +mod broadcast_message; mod handle_connection; +use handle_connection::handle_connection; + #[derive(Serialize, Deserialize, Debug)] struct MessageData { username: String, From d8861b66b2c7cea8b54134626593d8411e159d51 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 13:25:40 +0100 Subject: [PATCH 06/48] using serde feature from uuid, so i can add an id to a struct definition --- server/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/Cargo.toml b/server/Cargo.toml index 2b92661..8e4b1e5 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -11,4 +11,4 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" futures-util = "0.3.31" url = "2.5.7" -uuid = {version = "1.18.1", features = ["v4"] } +uuid = {version = "1.18.1", features = ["v4", "serde"] } From 73624baf90d400f7adbc8d7dbec03f8ab02a3baf Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 14:01:13 +0100 Subject: [PATCH 07/48] added server event enum --- server/src/main.rs | 1 + server/src/server_event.rs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 server/src/server_event.rs diff --git a/server/src/main.rs b/server/src/main.rs index ff5a706..11eda60 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -9,6 +9,7 @@ use uuid::Uuid; mod broadcast_message; mod handle_connection; +mod server_event; use handle_connection::handle_connection; diff --git a/server/src/server_event.rs b/server/src/server_event.rs new file mode 100644 index 0000000..a763837 --- /dev/null +++ b/server/src/server_event.rs @@ -0,0 +1,20 @@ +use uuid::Uuid; + +struct Step { + from: String, + to: String, +} + +enum ServerEvent { + PlayerJoined(Uuid), //tarolja el a kapcsolatot + PlayerLeft(Uuid), //torolje a jatekos a listabol mert kilepett + PlayerJoinedQeue(Uuid), //online jatekra var + PlayerJoinedMatch(Uuid), //player joined a match + PlayerRequestAvailableSteps(Uuid, String), //string board + PlayerSteps(Uuid, Step), //player moves piece + CheckWinner(Uuid, String), //player asks server if they won + PlayerIsInCheck(Uuid, String), //board state + PlayerOpponentUpdateUI(Uuid, String), //board state + PlayerLost(Uuid), + PlayerReturnToMenu(Uuid), +} From 532c5a42ea60b299943da0c11d96edab9c8b697c Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 15:13:01 +0100 Subject: [PATCH 08/48] added anyhow and rand crate --- server/Cargo.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/Cargo.toml b/server/Cargo.toml index 8e4b1e5..c631dd0 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -12,3 +12,5 @@ serde_json = "1" futures-util = "0.3.31" url = "2.5.7" uuid = {version = "1.18.1", features = ["v4", "serde"] } +anyhow = "1.0.100" +rand = "0.9.2" From 281f496c832cba074e72622c3b59608373407822 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 15:14:07 +0100 Subject: [PATCH 09/48] removed these files, ready to start working on event system messages --- server/src/broadcast_message.rs | 19 ------------------ server/src/handle_connection.rs | 34 --------------------------------- server/src/server_event.rs | 20 ------------------- 3 files changed, 73 deletions(-) delete mode 100644 server/src/broadcast_message.rs delete mode 100644 server/src/handle_connection.rs delete mode 100644 server/src/server_event.rs diff --git a/server/src/broadcast_message.rs b/server/src/broadcast_message.rs deleted file mode 100644 index 0248aab..0000000 --- a/server/src/broadcast_message.rs +++ /dev/null @@ -1,19 +0,0 @@ -use crate::ConnectionMap; -use futures_util::SinkExt; -use tokio_tungstenite::tungstenite::Message as WsMessage; - -pub async fn broadcast_message(connections: &ConnectionMap, msg: &WsMessage) { - let mut dead = vec![]; - let mut map = connections.lock().await; - - for (id, tx) in map.iter_mut() { - if let Err(e) = tx.send(msg.clone()).await { - eprintln!("Failed to send to {id}: {e}"); - dead.push(*id); - } - } - - for id in dead { - map.remove(&id); - } -} diff --git a/server/src/handle_connection.rs b/server/src/handle_connection.rs deleted file mode 100644 index af7849b..0000000 --- a/server/src/handle_connection.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::ConnectionMap; -use futures_util::StreamExt; -use tokio_tungstenite::accept_async; -use uuid::Uuid; - -use super::broadcast_message::broadcast_message; - -pub async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) { - let ws_stream = accept_async(stream).await.unwrap(); - let (write, mut read) = ws_stream.split(); - - let id = Uuid::new_v4(); - - { - let mut map = connections.lock().await; - map.insert(id, write); - } - - println!("New connection: {id}"); - - while let Some(Ok(msg)) = read.next().await { - if msg.is_text() { - println!("Recieved from {id}: {}", msg); - broadcast_message(&connections, &msg).await; - } - } - - { - let mut map = connections.lock().await; - map.remove(&id); - } - - println!("Connection removed: {id}"); -} diff --git a/server/src/server_event.rs b/server/src/server_event.rs deleted file mode 100644 index a763837..0000000 --- a/server/src/server_event.rs +++ /dev/null @@ -1,20 +0,0 @@ -use uuid::Uuid; - -struct Step { - from: String, - to: String, -} - -enum ServerEvent { - PlayerJoined(Uuid), //tarolja el a kapcsolatot - PlayerLeft(Uuid), //torolje a jatekos a listabol mert kilepett - PlayerJoinedQeue(Uuid), //online jatekra var - PlayerJoinedMatch(Uuid), //player joined a match - PlayerRequestAvailableSteps(Uuid, String), //string board - PlayerSteps(Uuid, Step), //player moves piece - CheckWinner(Uuid, String), //player asks server if they won - PlayerIsInCheck(Uuid, String), //board state - PlayerOpponentUpdateUI(Uuid, String), //board state - PlayerLost(Uuid), - PlayerReturnToMenu(Uuid), -} From ff68d9d2d9dd00623078d002840d8af1b1826c01 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 15:52:55 +0100 Subject: [PATCH 10/48] new server messages --- server/src/messages.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 server/src/messages.rs diff --git a/server/src/messages.rs b/server/src/messages.rs new file mode 100644 index 0000000..e6e957a --- /dev/null +++ b/server/src/messages.rs @@ -0,0 +1,36 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +#[serde(tag = "type")] +pub enum ServerMessage { + Welcome { + player_id: String, + }, + MatchFound { + match_id: String, + opponent: String, + color: String, + }, + GameStart { + fen: String, + white_time: u32, + black_time: u32, + }, + MoveResult { + valid: bool, + from: String, + to: String, + new_fen: String, + }, + OpponentMove { + from: String, + to: String, + }, + GameEnd { + result: String, + reason: String, + }, + Error { + reason: String, + }, +} From c2e29415c9a1a145ed5fbd2e526de6c5a69d243a Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 15:54:03 +0100 Subject: [PATCH 11/48] added new event system to handle different client events in game and on connection --- server/src/events.rs | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 server/src/events.rs diff --git a/server/src/events.rs b/server/src/events.rs new file mode 100644 index 0000000..0d836b5 --- /dev/null +++ b/server/src/events.rs @@ -0,0 +1,77 @@ +use serde::{Deserialize, Serialize}; +use std::sync::Arc; +use tokio::sync::Mutex; +use tokio::sync::mpsc; +use uuid::Uuid; + +#[derive(Serialize, Deserialize, Debug)] +pub struct Step { + pub from: String, + pub to: String, +} + +#[derive(Serialize, Deserialize, Debug)] +#[serde(tag = "type")] +pub enum ClientEvent { + Join { username: String }, + FindMatch, + Move { from: String, to: String }, + Resign, + Chat { text: String }, + RequestLegalMoves { fen: String }, +} + +#[derive(Debug)] +pub enum ServerEvent { + PlayerJoined(Uuid, String), + PlayerLeft(Uuid), + PlayerJoinedQueue(Uuid), + PlayerJoinedMatch(Uuid, Uuid), // player_id, match_id + PlayerMove(Uuid, Step), + PlayerResigned(Uuid), + MatchCreated(Uuid, Uuid, Uuid), // match_id, white_id, black_id +} + +pub struct EventSystem { + sender: mpsc::UnboundedSender<(Uuid, ClientEvent)>, + receiver: Arc>>, +} + +impl Clone for EventSystem { + fn clone(&self) -> Self { + Self { + sender: self.sender.clone(), + receiver: Arc::clone(&self.receiver), + } + } +} + +impl EventSystem { + pub fn new() -> Self { + let (sender, receiver) = mpsc::unbounded_channel(); + Self { + sender, + receiver: Arc::new(Mutex::new(receiver)), + } + } + + pub async fn send_event( + &self, + player_id: Uuid, + event: ClientEvent, + ) -> Result<(), Box> { + self.sender.send((player_id, event))?; + Ok(()) + } + + pub async fn next_event(&self) -> Option<(Uuid, ClientEvent)> { + let mut receiver = self.receiver.lock().await; + receiver.recv().await + } +} + +impl Default for EventSystem { + fn default() -> Self { + Self::new() + } +} From 5696128ac93eed022abe58919633f1792de6e933 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 17:11:23 +0100 Subject: [PATCH 12/48] handling differenk kinds of server messages, and matchmaking basics --- server/src/connection.rs | 169 ++++++++++++++++++++++++++++++++++++++ server/src/main.rs | 75 +++++++++-------- server/src/matchmaking.rs | 112 +++++++++++++++++++++++++ 3 files changed, 324 insertions(+), 32 deletions(-) create mode 100644 server/src/connection.rs create mode 100644 server/src/matchmaking.rs diff --git a/server/src/connection.rs b/server/src/connection.rs new file mode 100644 index 0000000..dd70056 --- /dev/null +++ b/server/src/connection.rs @@ -0,0 +1,169 @@ +use futures_util::{SinkExt, StreamExt}; +use serde::{Deserialize, Serialize}; +use std::collections::{HashMap, VecDeque}; +use std::sync::Arc; +use tokio::net::TcpStream; +use tokio::sync::Mutex; +use tokio_tungstenite::{WebSocketStream, tungstenite::Message}; +use uuid::Uuid; + +// Type definitions +pub type Tx = futures_util::stream::SplitSink, Message>; +pub type ConnectionMap = Arc>>; +pub type MatchMap = Arc>>; +pub type WaitingQueue = Arc>>; + +// Helper functions to create new instances +pub fn new_connection_map() -> ConnectionMap { + Arc::new(Mutex::new(HashMap::new())) +} + +pub fn new_match_map() -> MatchMap { + Arc::new(Mutex::new(HashMap::new())) +} + +pub fn new_waiting_queue() -> WaitingQueue { + Arc::new(Mutex::new(VecDeque::new())) +} + +#[derive(Debug)] +pub struct PlayerConnection { + pub id: Uuid, + pub username: Option, + pub tx: Tx, + pub current_match: Option, +} + +#[derive(Debug, Clone)] +pub struct GameMatch { + pub id: Uuid, + pub player_white: Uuid, + pub player_black: Uuid, + pub board_state: String, + pub move_history: Vec, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Step { + pub from: String, + pub to: String, +} + +// Message sending utilities +pub async fn send_message_to_player( + connections: &ConnectionMap, + player_id: Uuid, + message: &str, +) -> Result<(), Box> { + let mut connections_lock = connections.lock().await; + if let Some(connection) = connections_lock.get_mut(&player_id) { + connection + .tx + .send(Message::Text(message.to_string())) + .await?; + } + Ok(()) +} + +pub async fn broadcast_to_all(connections: &ConnectionMap, message: &str) { + let mut connections_lock = connections.lock().await; + let mut dead_connections = Vec::new(); + + for (id, connection) in connections_lock.iter_mut() { + if let Err(e) = connection.tx.send(Message::Text(message.to_string())).await { + eprintln!("Failed to send to {}: {}", id, e); + dead_connections.push(*id); + } + } + + // Clean up dead connections + for dead_id in dead_connections { + connections_lock.remove(&dead_id); + } +} + +pub async fn broadcast_to_match( + connections: &ConnectionMap, + matches: &MatchMap, + match_id: Uuid, + message: &str, +) -> Result<(), Box> { + let matches_lock = matches.lock().await; + if let Some(game_match) = matches_lock.get(&match_id) { + send_message_to_player(connections, game_match.player_white, message).await?; + send_message_to_player(connections, game_match.player_black, message).await?; + } + Ok(()) +} + +// Connection handler +pub async fn handle_connection( + stream: TcpStream, + connections: ConnectionMap, + matches: MatchMap, + waiting_queue: WaitingQueue, + event_system: crate::events::EventSystem, +) -> anyhow::Result<()> { + use tokio_tungstenite::accept_async; + + let ws_stream = accept_async(stream).await?; + let (write, mut read) = ws_stream.split(); + + let player_id = Uuid::new_v4(); + + // Store the connection + { + let mut conn_map = connections.lock().await; + conn_map.insert( + player_id, + PlayerConnection { + id: player_id, + username: None, + tx: write, + current_match: None, + }, + ); + } + + println!("New connection: {}", player_id); + + // Send welcome message + let _ = send_message_to_player( + &connections, + player_id, + &format!(r#"{{"type": "welcome", "player_id": "{}"}}"#, player_id), + ) + .await; + + // Message processing loop + while let Some(Ok(message)) = read.next().await { + if message.is_text() { + let text = message.to_text()?; + println!("Received from {}: {}", player_id, text); + + // TODO: Parse and handle message with event system + // This will be implemented when we integrate the event system + } + } + + // Cleanup on disconnect + cleanup_player(player_id, &connections, &matches, &waiting_queue).await; + println!("Connection {} closed", player_id); + + Ok(()) +} + +async fn cleanup_player( + player_id: Uuid, + connections: &ConnectionMap, + _matches: &MatchMap, + waiting_queue: &WaitingQueue, +) { + // Remove from waiting queue + waiting_queue.lock().await.retain(|&id| id != player_id); + + // Remove from connections + connections.lock().await.remove(&player_id); + + println!("Cleaned up player {}", player_id); +} diff --git a/server/src/main.rs b/server/src/main.rs index 11eda60..ecc9b6f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,44 +1,55 @@ -use futures_util::{SinkExt, StreamExt}; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::sync::Arc; +mod connection; +mod events; +mod matchmaking; + use tokio::net::TcpListener; -use tokio::sync::Mutex; -use tokio_tungstenite::accept_async; -use uuid::Uuid; - -mod broadcast_message; -mod handle_connection; -mod server_event; - -use handle_connection::handle_connection; - -#[derive(Serialize, Deserialize, Debug)] -struct MessageData { - username: String, - userid: u32, - text: String, -} - -type Tx = futures_util::stream::SplitSink< - tokio_tungstenite::WebSocketStream, - tokio_tungstenite::tungstenite::Message, ->; - -type ConnectionMap = Arc>>; #[tokio::main] -async fn main() { - let address = "0.0.0.0:9001"; //address to connect to - let listener = TcpListener::bind(address).await.unwrap(); +async fn main() -> anyhow::Result<()> { + let address = "0.0.0.0:9001"; + let listener = TcpListener::bind(address).await?; println!("Server running on ws://{}", address); - let connections: ConnectionMap = Arc::new(Mutex::new(HashMap::new())); + // Shared state initialization using the new helper functions + let connections = connection::new_connection_map(); + let matches = connection::new_match_map(); + let waiting_queue = connection::new_waiting_queue(); + // Event system for communication between components + let event_system = events::EventSystem::new(); + + // Start matchmaking background task + let matchmaker = matchmaking::MatchmakingSystem::new( + connections.clone(), + matches.clone(), + waiting_queue.clone(), + event_system.clone(), + ); + tokio::spawn(async move { + matchmaker.run().await; + }); + + // Main connection loop while let Ok((stream, _)) = listener.accept().await { let connections = connections.clone(); + let matches = matches.clone(); + let waiting_queue = waiting_queue.clone(); + let event_system = event_system.clone(); + tokio::spawn(async move { - handle_connection(stream, connections).await; + if let Err(e) = connection::handle_connection( + stream, + connections, + matches, + waiting_queue, + event_system, + ) + .await + { + eprintln!("Connection error: {}", e); + } }); } + + Ok(()) } diff --git a/server/src/matchmaking.rs b/server/src/matchmaking.rs new file mode 100644 index 0000000..c2995ba --- /dev/null +++ b/server/src/matchmaking.rs @@ -0,0 +1,112 @@ +use crate::connection::{ConnectionMap, GameMatch, MatchMap, WaitingQueue}; +use crate::events::EventSystem; +use rand::random; +use uuid::Uuid; + +pub struct MatchmakingSystem { + connections: ConnectionMap, + matches: MatchMap, + waiting_queue: WaitingQueue, + event_system: EventSystem, +} + +impl MatchmakingSystem { + pub fn new( + connections: ConnectionMap, + matches: MatchMap, + waiting_queue: WaitingQueue, + event_system: EventSystem, + ) -> Self { + Self { + connections, + matches, + waiting_queue, + event_system, + } + } + + pub async fn run(&self) { + loop { + self.try_create_match().await; + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + } + } + + async fn try_create_match(&self) { + let mut queue = self.waiting_queue.lock().await; + + while queue.len() >= 2 { + let player1 = queue.pop_front().unwrap(); + let player2 = queue.pop_front().unwrap(); + + let match_id = Uuid::new_v4(); + let (white_player, black_player) = if random::() { + (player1, player2) + } else { + (player2, player1) + }; + + let game_match = GameMatch { + id: match_id, + player_white: white_player, + player_black: black_player, + board_state: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1".to_string(), + move_history: Vec::new(), + }; + + // Store the match + self.matches.lock().await.insert(match_id, game_match); + + // Update player connections + { + let mut conn_map = self.connections.lock().await; + if let Some(player) = conn_map.get_mut(&white_player) { + player.current_match = Some(match_id); + } + if let Some(player) = conn_map.get_mut(&black_player) { + player.current_match = Some(match_id); + } + } + + // Notify players + self.notify_players(white_player, black_player, match_id) + .await; + } + } + + async fn notify_players(&self, white: Uuid, black: Uuid, match_id: Uuid) { + let conn_map = self.connections.lock().await; + + // Get opponent names + let white_name = conn_map + .get(&black) + .and_then(|c| c.username.as_deref()) + .unwrap_or("Opponent"); + let black_name = conn_map + .get(&white) + .and_then(|c| c.username.as_deref()) + .unwrap_or("Opponent"); + + // Notify white player + if let Some(_) = conn_map.get(&white) { + let message = format!( + r#"{{"type": "match_found", "match_id": "{}", "opponent": "{}", "color": "white"}}"#, + match_id, black_name + ); + let _ = + crate::connection::send_message_to_player(&self.connections, white, &message).await; + } + + // Notify black player + if let Some(_) = conn_map.get(&black) { + let message = format!( + r#"{{"type": "match_found", "match_id": "{}", "opponent": "{}", "color": "black"}}"#, + match_id, white_name + ); + let _ = + crate::connection::send_message_to_player(&self.connections, black, &message).await; + } + + println!("Match created: {} (white) vs {} (black)", white, black); + } +} From 352b4e57d7de27f94a4784eceff351e25b2f02c2 Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 18:42:17 +0100 Subject: [PATCH 13/48] rewrote the python script the script now checks for project name on every line read from the log file and appends it to a list named by the project, if the branch is master then it appends all lines into one list, then it checks if there is any data in the list and uploads them to the correct tab that matches the project name or master --- .github/workflows/upload_data.yml | 64 ++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/.github/workflows/upload_data.yml b/.github/workflows/upload_data.yml index 6cfe426..c814a4e 100644 --- a/.github/workflows/upload_data.yml +++ b/.github/workflows/upload_data.yml @@ -20,33 +20,71 @@ jobs: echo "$GOOGLE_SERVICE_ACCOUNT_JSON" > service_account.json python <<'PYCODE' - import gspread, json, time, subprocess + import gspread, json, subprocess - # credentials creds = json.load(open("service_account.json")) gc = gspread.service_account_from_dict(creds) sh = gc.open_by_key("${{ secrets.SPREADSHEET_ID }}") v = subprocess.run(['git','rev-parse','--show-toplevel'], capture_output=True).stdout.decode().strip() print(f"{v}/test_data.log") + + def writeRowsToSpreadsheet(data_list, worksheet): + existing_rows = len(worksheet.get_all_values()) + start_row = existing_rows + 3 + rows_to_append = [row.split() for row in data_list] + print(f"{rows_to_append}") + + for i, row in enumerate(rows_to_append): + worksheet.insert_row(row, start_row + i) + + with open(f"{v}/test_data.log", "r") as f: lines = [line.strip() for line in f if line.strip()] + isMaster = False project = lines[0].lower() - worksheet = sh.worksheet(project) + if project == "master": + isMaster = True + + engine_data = [] + server_data = [] + ui_data = [] + master_data = [] - # project name - data = lines[1:] + for entry in lines: + if not isMaster and entry == "engine": + project = "engine" + elif not isMaster and entry == "server": + project = "server" + elif not isMaster and entry == "ui": + project = "ui" - #blank rows - existing_rows = len(worksheet.get_all_values()) - start_row = existing_rows + 3 + if project == "engine" and entry != "engine": + engine_data.append(entry) + elif project == "server" and entry != "server": + server_data.append(entry) + elif project == "ui" and entry != "ui": + ui_data.append(entry) + elif project == "master" and entry != "master": + master_data.append(entry) - # Split data into columns (by spaces) - rows_to_append = [row.split() for row in data] + print("PRINTING FILTERED DATA\n\n") + print(f"engine\n{engine_data}") + print(f"server\n{server_data}") + print(f"ui\n{ui_data}") + print("\n\n\n") - for i, row in enumerate(rows_to_append): - worksheet.insert_row(row, start_row + i) + if isMaster and len(master_data) != 0: + worksheet = sh.worksheet("master") + writeRowsToSpreadsheet(master_data, worksheet) + exit(0) + + if len(engine_data) != 0: + writeRowsToSpreadsheet(engine_data, sh.worksheet("engine")) + if len(server_data) != 0: + writeRowsToSpreadsheet(server_data, sh.worksheet("server")) + if len(ui_data) != 0: + writeRowsToSpreadsheet(ui_data, sh.worksheet("ui")) - print(f"Uploaded {len(rows_to_append)} rows to '{project}' tab.") PYCODE From ad26d22281d2ffb9c1461077c1a020f5dca0494e Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 18:44:00 +0100 Subject: [PATCH 14/48] indentation error in python script --- .github/workflows/upload_data.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/upload_data.yml b/.github/workflows/upload_data.yml index c814a4e..fb24802 100644 --- a/.github/workflows/upload_data.yml +++ b/.github/workflows/upload_data.yml @@ -35,8 +35,8 @@ jobs: rows_to_append = [row.split() for row in data_list] print(f"{rows_to_append}") - for i, row in enumerate(rows_to_append): - worksheet.insert_row(row, start_row + i) + for i, row in enumerate(rows_to_append): + worksheet.insert_row(row, start_row + i) with open(f"{v}/test_data.log", "r") as f: From f8c14cc268e55ef1cddf58addc4a423516f8bc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= <75033623+htamas1210@users.noreply.github.com> Date: Wed, 12 Nov 2025 18:50:01 +0100 Subject: [PATCH 15/48] Enhance logging for data upload process Added print statements to log data being uploaded to each tab. --- .github/workflows/upload_data.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/upload_data.yml b/.github/workflows/upload_data.yml index fb24802..c0ab435 100644 --- a/.github/workflows/upload_data.yml +++ b/.github/workflows/upload_data.yml @@ -33,6 +33,7 @@ jobs: existing_rows = len(worksheet.get_all_values()) start_row = existing_rows + 3 rows_to_append = [row.split() for row in data_list] + print("rows to append") print(f"{rows_to_append}") for i, row in enumerate(rows_to_append): @@ -73,18 +74,23 @@ jobs: print(f"engine\n{engine_data}") print(f"server\n{server_data}") print(f"ui\n{ui_data}") + print(f"master\n{master_data}") print("\n\n\n") if isMaster and len(master_data) != 0: + print("uploading to master tab") worksheet = sh.worksheet("master") writeRowsToSpreadsheet(master_data, worksheet) exit(0) if len(engine_data) != 0: + print("uploading to engine tab") writeRowsToSpreadsheet(engine_data, sh.worksheet("engine")) if len(server_data) != 0: + print("uploading to server tab") writeRowsToSpreadsheet(server_data, sh.worksheet("server")) if len(ui_data) != 0: + print("uploading to ui tab") writeRowsToSpreadsheet(ui_data, sh.worksheet("ui")) PYCODE From 7be3c928b741c07d4c5150bbc74ede88f917ebb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= <75033623+htamas1210@users.noreply.github.com> Date: Wed, 12 Nov 2025 18:54:06 +0100 Subject: [PATCH 16/48] Display test_data.log in workflow script Added command to display contents of test_data.log --- .github/workflows/test.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.sh b/.github/workflows/test.sh index f948267..856d6c5 100755 --- a/.github/workflows/test.sh +++ b/.github/workflows/test.sh @@ -38,3 +38,5 @@ cat "$LOG_FILE" >> "$FINAL_LOG" # --- SUMMARY --- echo ">>> Test output extracted to $PROJECT_PATH/$LOG_FILE" echo ">>> Appended to $FINAL_LOG" + +cat $(git rev-parse --show-toplevel)/test_data.log From 39273908ac23c0565f82dcbce0b88e3d7b3d38dd Mon Sep 17 00:00:00 2001 From: htom Date: Wed, 12 Nov 2025 18:58:36 +0100 Subject: [PATCH 17/48] removed checkout to potentially fix an error with test_data.log --- .github/workflows/engine_test.yml | 2 -- .github/workflows/server_test.yml | 2 -- .github/workflows/ui_test.yml | 2 -- 3 files changed, 6 deletions(-) diff --git a/.github/workflows/engine_test.yml b/.github/workflows/engine_test.yml index 3f4bfec..78683a4 100644 --- a/.github/workflows/engine_test.yml +++ b/.github/workflows/engine_test.yml @@ -9,8 +9,6 @@ jobs: runs-on: self-hosted steps: - - uses: actions/checkout@v4 - - name: Run Engine tests run: | bash .github/workflows/test.sh engine/ diff --git a/.github/workflows/server_test.yml b/.github/workflows/server_test.yml index 4a2e817..7583a32 100644 --- a/.github/workflows/server_test.yml +++ b/.github/workflows/server_test.yml @@ -9,8 +9,6 @@ jobs: runs-on: self-hosted steps: - - uses: actions/checkout@v4 - - name: Run Server tests run: | bash .github/workflows/test.sh server/ diff --git a/.github/workflows/ui_test.yml b/.github/workflows/ui_test.yml index 7f0ca2c..c20ad98 100644 --- a/.github/workflows/ui_test.yml +++ b/.github/workflows/ui_test.yml @@ -9,8 +9,6 @@ jobs: runs-on: self-hosted steps: - - uses: actions/checkout@v4 - - name: Run UI tests run: | bash .github/workflows/test.sh ui/ From a497f8554fd84ad4c2a51c09010f8ad43daf1250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= <75033623+htamas1210@users.noreply.github.com> Date: Wed, 12 Nov 2025 19:12:47 +0100 Subject: [PATCH 18/48] Add checkout action to dispatcher workflow --- .github/workflows/dispatcher.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml index 0524127..7e3ff2d 100644 --- a/.github/workflows/dispatcher.yml +++ b/.github/workflows/dispatcher.yml @@ -16,6 +16,7 @@ jobs: server: ${{ steps.check.outputs.server }} ui: ${{ steps.check.outputs.ui }} steps: + - uses: actions/checkout@v4 - name: Determine which tests to run id: check run: | From da3b1c8c002d8b1e1d4b74fc90a33bbc62ec49c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= <75033623+htamas1210@users.noreply.github.com> Date: Wed, 12 Nov 2025 19:13:14 +0100 Subject: [PATCH 19/48] Add checkout action to dispatcher workflow --- .github/workflows/dispatcher.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml index 0524127..7e3ff2d 100644 --- a/.github/workflows/dispatcher.yml +++ b/.github/workflows/dispatcher.yml @@ -16,6 +16,7 @@ jobs: server: ${{ steps.check.outputs.server }} ui: ${{ steps.check.outputs.ui }} steps: + - uses: actions/checkout@v4 - name: Determine which tests to run id: check run: | From 4ffec0f05d71046d9e9fb48f8d9267f452a00619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= <75033623+htamas1210@users.noreply.github.com> Date: Wed, 12 Nov 2025 19:27:29 +0100 Subject: [PATCH 20/48] Add name to checkout step in dispatcher.yml --- .github/workflows/dispatcher.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dispatcher.yml b/.github/workflows/dispatcher.yml index 7e3ff2d..c14414d 100644 --- a/.github/workflows/dispatcher.yml +++ b/.github/workflows/dispatcher.yml @@ -16,7 +16,8 @@ jobs: server: ${{ steps.check.outputs.server }} ui: ${{ steps.check.outputs.ui }} steps: - - uses: actions/checkout@v4 + - name: checkout repository + uses: actions/checkout@v4 - name: Determine which tests to run id: check run: | From 83a73ed34c438abf0662a2134d80378f215a489e Mon Sep 17 00:00:00 2001 From: htom Date: Thu, 13 Nov 2025 15:19:26 +0100 Subject: [PATCH 21/48] Added tests --- server/src/connection.rs | 49 +++++++++++++++++++++ server/src/events.rs | 49 +++++++++++++++++++++ server/src/main.rs | 1 - server/src/matchmaking.rs | 90 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 1 deletion(-) diff --git a/server/src/connection.rs b/server/src/connection.rs index dd70056..715ae88 100644 --- a/server/src/connection.rs +++ b/server/src/connection.rs @@ -167,3 +167,52 @@ async fn cleanup_player( println!("Cleaned up player {}", player_id); } + +#[cfg(test)] +mod tests { + use super::*; + use uuid::Uuid; + + #[tokio::test] + async fn test_send_message_to_nonexistent_player() { + let connections = new_connection_map(); + let player_id = Uuid::new_v4(); + + let result = send_message_to_player(&connections, player_id, "test message").await; + assert!(result.is_ok(), "Should handle missing player gracefully"); + } + + #[tokio::test] + async fn test_broadcast_to_empty_connections() { + let connections = new_connection_map(); + + broadcast_to_all(&connections, "test broadcast").await; + + let conn_map = connections.lock().await; + assert!(conn_map.is_empty(), "Connections should still be empty"); + } + + #[tokio::test] + async fn test_connection_cleanup() { + let connections = new_connection_map(); + let matches = new_match_map(); + let waiting_queue = new_waiting_queue(); + + let player_id = Uuid::new_v4(); + + { + waiting_queue.lock().await.push_back(player_id); + assert_eq!(waiting_queue.lock().await.len(), 1); + } + + cleanup_player(player_id, &connections, &matches, &waiting_queue).await; + + { + let queue = waiting_queue.lock().await; + assert!( + !queue.contains(&player_id), + "Player should be removed from waiting queue" + ); + } + } +} diff --git a/server/src/events.rs b/server/src/events.rs index 0d836b5..8cc43a4 100644 --- a/server/src/events.rs +++ b/server/src/events.rs @@ -75,3 +75,52 @@ impl Default for EventSystem { Self::new() } } + +#[cfg(test)] +mod tests { + use super::*; + use uuid::Uuid; + + #[tokio::test] + async fn test_event_system_send_and_receive() { + let event_system = EventSystem::new(); + let player_id = Uuid::new_v4(); + + let join_event = ClientEvent::Join { + username: "test_user".to_string(), + }; + + let send_result = event_system.send_event(player_id, join_event).await; + assert!(send_result.is_ok(), "Should send event successfully"); + + let received = event_system.next_event().await; + assert!(received.is_some(), "Should receive sent event"); + + let (received_id, received_event) = received.unwrap(); + assert_eq!(received_id, player_id, "Should receive correct player ID"); + + match received_event { + ClientEvent::Join { username } => { + assert_eq!(username, "test_user", "Should receive correct username"); + } + _ => panic!("Should receive Join event"), + } + } + + #[tokio::test] + async fn test_event_system_clone() { + let event_system1 = EventSystem::new(); + let event_system2 = event_system1.clone(); + + let player_id = Uuid::new_v4(); + let event = ClientEvent::FindMatch; + + event_system1.send_event(player_id, event).await.unwrap(); + + let received = event_system2.next_event().await; + assert!( + received.is_some(), + "Cloned event system should receive events" + ); + } +} diff --git a/server/src/main.rs b/server/src/main.rs index ecc9b6f..0d35baf 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,7 +1,6 @@ mod connection; mod events; mod matchmaking; - use tokio::net::TcpListener; #[tokio::main] diff --git a/server/src/matchmaking.rs b/server/src/matchmaking.rs index c2995ba..4f4cc27 100644 --- a/server/src/matchmaking.rs +++ b/server/src/matchmaking.rs @@ -110,3 +110,93 @@ impl MatchmakingSystem { println!("Match created: {} (white) vs {} (black)", white, black); } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::events::EventSystem; + use uuid::Uuid; + + use crate::connection::new_connection_map; + use crate::connection::new_match_map; + use crate::connection::new_waiting_queue; + + #[tokio::test] + async fn test_matchmaking_creates_matches() { + let connections = new_connection_map(); + let matches = new_match_map(); + let waiting_queue = new_waiting_queue(); + let event_system = EventSystem::new(); + + let matchmaking = MatchmakingSystem::new( + connections.clone(), + matches.clone(), + waiting_queue.clone(), + event_system.clone(), + ); + + let player1 = Uuid::new_v4(); + let player2 = Uuid::new_v4(); + + { + waiting_queue.lock().await.push_back(player1); + waiting_queue.lock().await.push_back(player2); + } + + matchmaking.try_create_match().await; + + { + let matches_map = matches.lock().await; + assert_eq!(matches_map.len(), 1, "Should create one match"); + + let game_match = matches_map.values().next().unwrap(); + assert!(game_match.player_white == player1 || game_match.player_white == player2); + assert!(game_match.player_black == player1 || game_match.player_black == player2); + assert_ne!( + game_match.player_white, game_match.player_black, + "Players should be different" + ); + } + + { + let queue = waiting_queue.lock().await; + assert!( + queue.is_empty(), + "Waiting queue should be empty after matchmaking" + ); + } + } + + #[tokio::test] + async fn test_matchmaking_with_odd_players() { + let connections = new_connection_map(); + let matches = new_match_map(); + let waiting_queue = new_waiting_queue(); + let event_system = EventSystem::new(); + + let matchmaking = MatchmakingSystem::new( + connections.clone(), + matches.clone(), + waiting_queue.clone(), + event_system.clone(), + ); + + let player1 = Uuid::new_v4(); + { + waiting_queue.lock().await.push_back(player1); + } + + matchmaking.try_create_match().await; + + { + let matches_map = matches.lock().await; + assert!( + matches_map.is_empty(), + "Should not create match with only one player" + ); + + let queue = waiting_queue.lock().await; + assert_eq!(queue.len(), 1, "Should keep single player in queue"); + } + } +} From 3cd53c7d708746143c8a0c75beff8c58c87eda1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 09:51:07 +0100 Subject: [PATCH 22/48] added file and module structure for board representation --- engine/src/bitboard.rs | 3 ++- engine/src/bitboard/board.rs | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 engine/src/bitboard/board.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 67d128d..890ddc2 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -1,2 +1,3 @@ mod attackmaps; -mod utils; \ No newline at end of file +mod utils; +pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs new file mode 100644 index 0000000..e69de29 From 66dd2877b24f2ed8336119f9a1989bb64c7315f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 09:56:17 +0100 Subject: [PATCH 23/48] defined board representation shape in board.rs --- engine/src/bitboard/board.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index e69de29..b742d5c 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -0,0 +1,10 @@ +pub struct Board { + bitboards: [u64; 12], // 0-5 -> white pieces (P, N, B, R, Q, K), 6-11 -> black pieces (p, n, b, r, q, k) + piece_board: [u8; 64], // same as board indexes, 12 -> empty square + occupancy: [u64; 3], // 0 -> white, 1 -> black, 2 -> combined + castling_rights: u8, // 0b0000_KQkq + pinned_squares: [u8; 64], // 0 -> E-W, 1 -> NE-SW, 2 -> N-S, 3 -> SE-NW, 4 -> no pin + pin_mask: u64, // 1 -> pin, 0 -> no pin + en_passant_square: u64, // 1 -> ep square, 0 -> no ep square + side_to_move: u8, // 0 -> white to play, 1 -> black to play +} \ No newline at end of file From 38b38845d67d891b99676d41f671eac2a3a7ce03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 09:58:38 +0100 Subject: [PATCH 24/48] added constructor for clear board to board.rs --- engine/src/bitboard/board.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index b742d5c..d630c32 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -6,5 +6,23 @@ pub struct Board { pinned_squares: [u8; 64], // 0 -> E-W, 1 -> NE-SW, 2 -> N-S, 3 -> SE-NW, 4 -> no pin pin_mask: u64, // 1 -> pin, 0 -> no pin en_passant_square: u64, // 1 -> ep square, 0 -> no ep square - side_to_move: u8, // 0 -> white to play, 1 -> black to play + side_to_move: u8 // 0 -> white to play, 1 -> black to play +} + +impl Board { + + pub fn new_clear() -> Self { + let mut bit_board: Self = Self { + bitboards: [0x0000_0000_0000_0000; 12], + piece_board: [12; 64], + occupancy: [0x0000_0000_0000_0000; 3], + castling_rights: 0b0000_0000, + pinned_squares: [4; 64], + pin_mask: 0u64, + en_passant_square: 0x0000_0000_0000_0000, + side_to_move: 0 + }; + + return bit_board; + } } \ No newline at end of file From 7f4c53ddb74a8c0808f33a047e459caae665cf36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:03:24 +0100 Subject: [PATCH 25/48] added partial constructor for initial board state to board.rs --- engine/src/bitboard/board.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index d630c32..85abea4 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -25,4 +25,29 @@ impl Board { return bit_board; } + pub fn new() -> Self { + let mut bit_board: Board = Self { + bitboards: [0x0000_0000_0000_FF00, + 0x0000_0000_0000_0042, + 0x0000_0000_0000_0024, + 0x0000_0000_0000_0081, + 0x0000_0000_0000_0008, + 0x0000_0000_0000_0010, + 0x00FF_0000_0000_0000, + 0x4200_0000_0000_0000, + 0x2400_0000_0000_0000, + 0x8100_0000_0000_0000, + 0x0800_0000_0000_0000, + 0x1000_0000_0000_0000], + piece_board: [12; 64], + occupancy: [0; 3], + castling_rights: 0b0000_1111, + pinned_squares: [4; 64], + pin_mask: 0u64, + en_passant_square: 0x0000_0000_0000_0000, + side_to_move: 0 + }; + return bit_board; + } + } \ No newline at end of file From c88fbe68e310a023d60f5fa3d854faf993dfecd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:06:12 +0100 Subject: [PATCH 26/48] added and used necessary methods the initial state constructor --- engine/src/bitboard/board.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 85abea4..3d3695d 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -50,4 +50,26 @@ impl Board { return bit_board; } + + + fn calc_occupancy(&mut self) { + self.occupancy = [0u64; 3]; + for b in 0..6 { + self.occupancy[0] |= self.bitboards[b]; + } + for b in 6..12 { + self.occupancy[1] |= self.bitboards[b]; + } + self.occupancy[2] = self.occupancy[0] | self.occupancy[1]; + } + fn calc_piece_board(&mut self) { + for sq in 0..64 { + for b in 0..12 { + if (self.bitboards[b as usize] & 1 << sq) != 0 { + self.piece_board[sq] = b; + } + } + } + } + } \ No newline at end of file From 11f26809df1eef76067c7ed1a61aadc99feb5dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:07:23 +0100 Subject: [PATCH 27/48] used calc_occupancy and calc_piece_board methods in the initial state constructor --- engine/src/bitboard/board.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 3d3695d..06d5e7d 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -47,6 +47,9 @@ impl Board { en_passant_square: 0x0000_0000_0000_0000, side_to_move: 0 }; + bit_board.calc_occupancy(); + bit_board.calc_piece_board(); + return bit_board; } From f36a196b2f39afa9a91db2d18655a7b6517c3d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:11:34 +0100 Subject: [PATCH 28/48] added getters for fields --- engine/src/bitboard/board.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 06d5e7d..1a7794c 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -53,6 +53,38 @@ impl Board { return bit_board; } + #[inline(always)] + pub fn bitboards(&self, index: usize) -> u64 { + return self.bitboards[index]; + } + #[inline(always)] + pub fn piece_board(&self, sq: u8) -> u8 { + return self.piece_board[sq as usize]; + } + #[inline(always)] + pub fn occupancy(&self, side: usize) -> u64 { + return self.occupancy[side]; + } + #[inline(always)] + pub fn castling_rights(&self) -> u8 { + return self.castling_rights; + } + #[inline(always)] + pub fn pinned_squares(&self, sq: usize) -> u8 { + return self.pinned_squares[sq]; + } + #[inline(always)] + pub fn pin_mask(&self) -> u64 { + return self.pin_mask; + } + #[inline(always)] + pub fn en_passant_square(&self) -> u64 { + return self.en_passant_square; + } + #[inline(always)] + pub fn side_to_move(&self) -> u8 { + return self.side_to_move; + } fn calc_occupancy(&mut self) { From 5854dbc20b20dc1e95a6c05aea5e9bbe240e3f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:12:52 +0100 Subject: [PATCH 29/48] set each field to pub(in super) for later use --- engine/src/bitboard/board.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 1a7794c..71980df 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -1,12 +1,12 @@ pub struct Board { - bitboards: [u64; 12], // 0-5 -> white pieces (P, N, B, R, Q, K), 6-11 -> black pieces (p, n, b, r, q, k) - piece_board: [u8; 64], // same as board indexes, 12 -> empty square - occupancy: [u64; 3], // 0 -> white, 1 -> black, 2 -> combined - castling_rights: u8, // 0b0000_KQkq - pinned_squares: [u8; 64], // 0 -> E-W, 1 -> NE-SW, 2 -> N-S, 3 -> SE-NW, 4 -> no pin - pin_mask: u64, // 1 -> pin, 0 -> no pin - en_passant_square: u64, // 1 -> ep square, 0 -> no ep square - side_to_move: u8 // 0 -> white to play, 1 -> black to play + pub(in super) bitboards: [u64; 12], // 0-5 -> white pieces (P, N, B, R, Q, K), 6-11 -> black pieces (p, n, b, r, q, k) + pub(in super) piece_board: [u8; 64], // same as board indexes, 12 -> empty square + pub(in super) occupancy: [u64; 3], // 0 -> white, 1 -> black, 2 -> combined + pub(in super) castling_rights: u8, // 0b0000_KQkq + pub(in super) pinned_squares: [u8; 64], // 0 -> E-W, 1 -> NE-SW, 2 -> N-S, 3 -> SE-NW, 4 -> no pin + pub(in super) pin_mask: u64, // 1 -> pin, 0 -> no pin + pub(in super) en_passant_square: u64, // 1 -> ep square, 0 -> no ep square + pub(in super) side_to_move: u8 // 0 -> white to play, 1 -> black to play } impl Board { From 274ffcf5ec9d936810847e046b8c666c2b65023d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:14:37 +0100 Subject: [PATCH 30/48] added method to get the current square of a king --- engine/src/bitboard/board.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 71980df..7eb73da 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -86,6 +86,10 @@ impl Board { return self.side_to_move; } + #[inline(always)] + pub fn current_king_square(&self) -> u32 { + return if self.side_to_move == 0 { self.bitboards[5].trailing_zeros() } else { self.bitboards[11].trailing_zeros() }; + } fn calc_occupancy(&mut self) { self.occupancy = [0u64; 3]; From 1104c8e6c57c79369d1af0f0dcfb130fdb11efdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:21:00 +0100 Subject: [PATCH 31/48] added helper method for fen parsing to utils.rs --- engine/src/bitboard/utils.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/engine/src/bitboard/utils.rs b/engine/src/bitboard/utils.rs index a30e503..25d7ba8 100644 --- a/engine/src/bitboard/utils.rs +++ b/engine/src/bitboard/utils.rs @@ -27,6 +27,27 @@ pub fn notation_from_square_number(sq: u8) -> String { return notation; } +pub fn try_get_square_number_from_notation(notation: &str) -> Result { + + let file = match notation.chars().nth(0).unwrap() { + 'a' => 0, + 'b' => 1, + 'c' => 2, + 'd' => 3, + 'e' => 4, + 'f' => 5, + 'g' => 6, + 'h' => 7, + _ => { return Result::Err(()); } + }; + if let Some(rank) = notation.chars().nth(1) { + return Result::Ok(file + 8 * (rank.to_digit(10).unwrap() as u8) - 8); + } + else { + return Result::Err(()); + } +} + // <----- TESTS -----> From 5425ccc5cd729e545b9af00103a204c6338ea5ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:26:31 +0100 Subject: [PATCH 32/48] added partial constructor for starting from a fen position --- engine/src/bitboard/board.rs | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 7eb73da..7ceb4d6 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -1,3 +1,5 @@ +use super::utils::try_get_square_number_from_notation; + pub struct Board { pub(in super) bitboards: [u64; 12], // 0-5 -> white pieces (P, N, B, R, Q, K), 6-11 -> black pieces (p, n, b, r, q, k) pub(in super) piece_board: [u8; 64], // same as board indexes, 12 -> empty square @@ -52,6 +54,72 @@ impl Board { return bit_board; } + pub fn build(fen: &str) -> Self { + let mut board: Board = Board::new_clear(); + + let mut col: i32 = 0; + let mut row: i32 = 7; + let pieces: [char; 12] = ['p', 'n', 'b', 'r', 'q', 'k', 'P', 'N', 'B', 'R', 'Q', 'K']; + let mut coming_up: &str = fen; + + for (i, c) in coming_up.chars().enumerate() { + if pieces.contains(&c) { + // board.place_piece(row*8 + col, c); + col += 1; + } + else if ('1'..='8').contains(&c) { + col += c.to_string().parse::().unwrap(); + } + else if c == '/' { + row -= 1; + col = 0; + } + else { + coming_up = &coming_up[i+1..]; + break; + } + } + board.calc_occupancy(); + + match coming_up.chars().next().unwrap() { + 'w' => board.side_to_move = 0, + 'b' => board.side_to_move = 1, + _ => panic!("invalid fen notation / to be handled later") + } + coming_up = &coming_up[2..]; + + for (i, c) in coming_up.chars().enumerate() { + match c { + 'K' => board.castling_rights |= 1 << 3, + 'Q' => board.castling_rights |= 1 << 2, + 'k' => board.castling_rights |= 1 << 1, + 'q' => board.castling_rights |= 1, + '-' => { + coming_up = &coming_up[i+2..]; + break; + } + _ => { + coming_up = &coming_up[i+1..]; + break; + } + } + } + match coming_up.chars().next().unwrap() { + '-' => { + coming_up = &coming_up[1..]; + } + _ => { + let notation = coming_up.split(' ').next().unwrap(); + if let Ok(epsq_index) = try_get_square_number_from_notation(notation) { + board.en_passant_square = 1 << epsq_index; + } + } + } + // board.calc_pinned_squares(); + board.calc_piece_board(); + + return board; + } #[inline(always)] pub fn bitboards(&self, index: usize) -> u64 { From 2beb8ab30348026b631bd3d8b2e0b4d6fb7af5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 10:31:02 +0100 Subject: [PATCH 33/48] added file and module structure for bitboard::legality.rs --- engine/src/bitboard.rs | 2 ++ engine/src/bitboard/legality.rs | 0 2 files changed, 2 insertions(+) create mode 100644 engine/src/bitboard/legality.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 890ddc2..806a35c 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -1,3 +1,5 @@ mod attackmaps; mod utils; +mod legality; + pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/legality.rs b/engine/src/bitboard/legality.rs new file mode 100644 index 0000000..e69de29 From cd58a7a321767e20173d7e939275fdf07e93fbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:30:01 +0100 Subject: [PATCH 34/48] added methods for detecting pinned pieces --- engine/src/bitboard/legality.rs | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/engine/src/bitboard/legality.rs b/engine/src/bitboard/legality.rs index e69de29..7d12e57 100644 --- a/engine/src/bitboard/legality.rs +++ b/engine/src/bitboard/legality.rs @@ -0,0 +1,48 @@ +use super::board::Board; +use super::attackmaps::RAY_TABLE; + +impl Board { + + pub(in super) fn calc_pinned_squares(&mut self) { + self.pinned_squares = [4; 64]; + self.pin_mask = 0u64; + + let friendly_pieces: u64 = self.occupancy[self.side_to_move as usize]; + let offset: usize = 6 * self.side_to_move as usize; + let king_board: u64 = self.bitboards[5 + offset]; + let king_sq: u32 = king_board.trailing_zeros(); + let opponent_queen_bishop_mask: u64 = self.bitboards[8 - offset] | self.bitboards[10 - offset]; + let opponent_queen_rook_mask: u64 = self.bitboards[9 - offset] | self.bitboards[10 - offset]; + + // Queen-Rook directions + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_rook_mask, 0); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_rook_mask, 2); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_rook_mask, 4); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_rook_mask, 6); + + // Queen-Bishop directions + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_bishop_mask, 1); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_bishop_mask, 3); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_bishop_mask, 5); + self.set_pinned_in_ray_direction(king_sq, friendly_pieces, opponent_queen_bishop_mask, 7); + } + + pub(in super) fn set_pinned_in_ray_direction(&mut self, king_sq: u32, friendly_pieces: u64, attackers: u64, dir: u8) { + let is_up: bool = dir / 4 == 0; + let mask: u64 = RAY_TABLE[king_sq as usize][dir as usize]; + let blockers: u64 = self.occupancy[2] & mask; + if blockers == 0 { return; } + let first_blocker_sq: u32 = if is_up { blockers.trailing_zeros() } else { 63 - blockers.leading_zeros() }; + if (friendly_pieces & 1 << first_blocker_sq) != 0 { + let blockers: u64 = blockers & !(1 << first_blocker_sq); + if blockers == 0 { return; } + let second_blocker_sq: u32 = if is_up { blockers.trailing_zeros() } else { 63 - blockers.leading_zeros() }; + + if (attackers & 1 << second_blocker_sq) != 0 { + self.pinned_squares[first_blocker_sq as usize] = dir % 4; + self.pin_mask |= 1 << first_blocker_sq; + } + } + } + +} \ No newline at end of file From f7355f8e7418bf9517441a921c46d88ab13c36c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:33:18 +0100 Subject: [PATCH 35/48] implemented use of calc_pinned_squares in board.rs --- engine/src/bitboard/board.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/src/bitboard/board.rs b/engine/src/bitboard/board.rs index 7ceb4d6..11a85ce 100644 --- a/engine/src/bitboard/board.rs +++ b/engine/src/bitboard/board.rs @@ -115,7 +115,7 @@ impl Board { } } } - // board.calc_pinned_squares(); + board.calc_pinned_squares(); board.calc_piece_board(); return board; From 296f1f6c3aa2760d87e9d4e0197de3ba447a58cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:36:11 +0100 Subject: [PATCH 36/48] added file and module structure for checkinfo.rs --- engine/src/bitboard.rs | 1 + engine/src/bitboard/checkinfo.rs | 0 2 files changed, 1 insertion(+) create mode 100644 engine/src/bitboard/checkinfo.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 806a35c..5c9b419 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -1,5 +1,6 @@ mod attackmaps; mod utils; mod legality; +mod checkinfo; pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/checkinfo.rs b/engine/src/bitboard/checkinfo.rs new file mode 100644 index 0000000..e69de29 From 182aa59ee157303b78b5e931c19b8e72e9992057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:37:47 +0100 Subject: [PATCH 37/48] defined shape of struct CheckInfo in bitboard::checkinfo.rs --- engine/src/bitboard/checkinfo.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/src/bitboard/checkinfo.rs b/engine/src/bitboard/checkinfo.rs index e69de29..de86521 100644 --- a/engine/src/bitboard/checkinfo.rs +++ b/engine/src/bitboard/checkinfo.rs @@ -0,0 +1,5 @@ + +pub struct CheckInfo { + pub check_count: u8, + pub move_mask: u64 +} \ No newline at end of file From ad530e915510d35115230411414e542e9d318c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:39:35 +0100 Subject: [PATCH 38/48] added constructor for struct CheckInfo in bitboard::checkinfo.rs --- engine/src/bitboard/checkinfo.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/engine/src/bitboard/checkinfo.rs b/engine/src/bitboard/checkinfo.rs index de86521..f9a9553 100644 --- a/engine/src/bitboard/checkinfo.rs +++ b/engine/src/bitboard/checkinfo.rs @@ -2,4 +2,14 @@ pub struct CheckInfo { pub check_count: u8, pub move_mask: u64 +} + +impl CheckInfo { + + pub fn new() -> Self { + return Self { + check_count: 0, + move_mask: 0xFFFF_FFFF_FFFF_FFFF + } + } } \ No newline at end of file From f9a302c9a037182f67bd7b88ed87368b3ddcf317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 12:40:52 +0100 Subject: [PATCH 39/48] implemented method add_checker for CheckInfo in bitboard::checkinfo.rs --- engine/src/bitboard/checkinfo.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/engine/src/bitboard/checkinfo.rs b/engine/src/bitboard/checkinfo.rs index f9a9553..b145321 100644 --- a/engine/src/bitboard/checkinfo.rs +++ b/engine/src/bitboard/checkinfo.rs @@ -12,4 +12,10 @@ impl CheckInfo { move_mask: 0xFFFF_FFFF_FFFF_FFFF } } + + #[inline(always)] + pub fn add_checker(&mut self, move_mask: u64) { + self.move_mask &= move_mask; + self.check_count += 1; + } } \ No newline at end of file From a1482d11f21709ac83d40fd6425f50b745c9bc8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:38:48 +0100 Subject: [PATCH 40/48] added file and module structure for bitboard::attacks.rs --- engine/src/bitboard.rs | 1 + engine/src/bitboard/attacks.rs | 0 2 files changed, 1 insertion(+) create mode 100644 engine/src/bitboard/attacks.rs diff --git a/engine/src/bitboard.rs b/engine/src/bitboard.rs index 5c9b419..504ae04 100644 --- a/engine/src/bitboard.rs +++ b/engine/src/bitboard.rs @@ -2,5 +2,6 @@ mod attackmaps; mod utils; mod legality; mod checkinfo; +mod attacks; pub mod board; \ No newline at end of file diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs new file mode 100644 index 0000000..e69de29 From 8ecbeb9c41a4e1f01f40ab17a1574473e841f02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:40:40 +0100 Subject: [PATCH 41/48] implemented pseudo-move generation for pawn moves --- engine/src/bitboard/attacks.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index e69de29..83c6a15 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -0,0 +1,29 @@ +use super::board::Board; + +impl Board { + + const RANK_2: u64 = 0x0000_0000_0000_FF00; + const RANK_7: u64 = 0x00FF_0000_0000_0000; + + pub fn get_pseudo_pawn_moves(&self, sq: u32) -> u64 { + let pawn: u64 = 1 << sq; + let mut move_mask: u64 = 0u64; + let move_offset: i8 = 8 - 16 * self.side_to_move as i8; + + let next_sq: u64 = if move_offset > 0 {pawn << move_offset} else {pawn >> -move_offset}; + if (self.occupancy[2] & next_sq) == 0 { + move_mask |= next_sq; + + if (self.side_to_move == 0 && pawn & Self::RANK_2 != 0) + || (self.side_to_move == 1 && pawn & Self::RANK_7 != 0) { + + let next_sq: u64 = if move_offset > 0 {next_sq << move_offset} else {next_sq >> -move_offset}; + if (self.occupancy[2] & next_sq) == 0 { + move_mask |= next_sq; + } + } + } + + return move_mask; + } +} \ No newline at end of file From 274897a070ee95dae87707a127ac6e73fc008333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:41:40 +0100 Subject: [PATCH 42/48] implemented pseudo-move generation for knights --- engine/src/bitboard/attacks.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 83c6a15..589d257 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -1,4 +1,5 @@ use super::board::Board; +use super::attackmaps::*; impl Board { @@ -26,4 +27,8 @@ impl Board { return move_mask; } + #[inline] + pub fn get_pseudo_knight_moves(&self, sq: u32) -> u64 { + return KNIGHT_ATTACK_MAP[sq as usize]; + } } \ No newline at end of file From f8ab14a026b32d918b35db5f76c714038ed27b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:42:41 +0100 Subject: [PATCH 43/48] implemented pseudo-move generation for kings --- engine/src/bitboard/attacks.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 589d257..3c2cf91 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -31,4 +31,9 @@ impl Board { pub fn get_pseudo_knight_moves(&self, sq: u32) -> u64 { return KNIGHT_ATTACK_MAP[sq as usize]; } + #[inline] + pub fn get_pseudo_king_moves(&self, sq: u32) -> u64 { + return KING_ATTACK_MAP[sq as usize]; + } + } \ No newline at end of file From eab795b6dff42fdcf302271342070f1c75737959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:43:37 +0100 Subject: [PATCH 44/48] implemented pseudo-move generation for pawn captures --- engine/src/bitboard/attacks.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 3c2cf91..d4f711e 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -35,5 +35,13 @@ impl Board { pub fn get_pseudo_king_moves(&self, sq: u32) -> u64 { return KING_ATTACK_MAP[sq as usize]; } + #[inline] + pub fn get_pseudo_pawn_captures(&self, sq: u32) -> u64 { + return PAWN_ATTACK_MAP[sq as usize][self.side_to_move as usize]; + } + #[inline] + pub fn get_pseudo_opponent_pawn_captures(&self, sq: u32) -> u64 { + return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; + } } \ No newline at end of file From c9246d134273ab25f591fae6c2373d0b8e0f5763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:45:01 +0100 Subject: [PATCH 45/48] added helper function: get_raycast_from_square_in_direction --- engine/src/bitboard/attacks.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index d4f711e..6de2083 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -44,4 +44,19 @@ impl Board { return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; } +} + +#[inline(always)] +pub fn get_raycast_from_square_in_direction(occupancy: u64, sq: usize, dir: usize) -> u64 { + let is_up: bool = dir / 4 == 0; + let mut ray: u64 = RAY_TABLE[sq][dir]; + let blockers: u64 = occupancy & ray; + + if blockers != 0 { + let first_blocker: u32 = if is_up { blockers.trailing_zeros() } else { 63 - blockers.leading_zeros() }; + + ray &= !RAY_TABLE[first_blocker as usize][dir]; + } + + return ray; } \ No newline at end of file From 7c58f0d508cdaa1ec389233c0ab6b5d7d0b6d9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:46:11 +0100 Subject: [PATCH 46/48] implemented pseudo-move generation for bishops --- engine/src/bitboard/attacks.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 6de2083..0938d0c 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -43,7 +43,19 @@ impl Board { pub fn get_pseudo_opponent_pawn_captures(&self, sq: u32) -> u64 { return PAWN_ATTACK_MAP[sq as usize][1 - self.side_to_move as usize]; } + #[inline] + pub fn get_pseudo_bishop_moves(&self, sq: u32) -> u64 { + let mut moves = 0u64; + let sq = sq as usize; + let occupancy = self.occupancy[2]; + moves |= get_raycast_from_square_in_direction(occupancy, sq, 1); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 3); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 5); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 7); + return moves; + } + } #[inline(always)] From 4de505bc21b1e040e340162b4fd9b08c91743d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:47:03 +0100 Subject: [PATCH 47/48] implemented pseudo-move generation for rooks --- engine/src/bitboard/attacks.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index 0938d0c..f748cb3 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -55,7 +55,18 @@ impl Board { return moves; } - + #[inline] + pub fn get_pseudo_rook_moves(&self, sq: u32) -> u64 { + let mut moves: u64 = 0u64; + let occupancy = self.occupancy[2]; + let sq = sq as usize; + moves |= get_raycast_from_square_in_direction(occupancy, sq, 0); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 2); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 4); + moves |= get_raycast_from_square_in_direction(occupancy, sq, 6); + + return moves; + } } #[inline(always)] From 659413ca31f03c71cc5b6fb03282214469897b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Sat, 15 Nov 2025 13:47:46 +0100 Subject: [PATCH 48/48] implemented pseudo-move generation for queens --- engine/src/bitboard/attacks.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engine/src/bitboard/attacks.rs b/engine/src/bitboard/attacks.rs index f748cb3..a348d96 100644 --- a/engine/src/bitboard/attacks.rs +++ b/engine/src/bitboard/attacks.rs @@ -67,6 +67,10 @@ impl Board { return moves; } + #[inline(always)] + pub fn get_pseudo_queen_moves(&self, sq: u32) -> u64 { + return self.get_pseudo_bishop_moves(sq) | self.get_pseudo_rook_moves(sq); + } } #[inline(always)]