From 63c663a88f7670be068067aab6cffe619b636859 Mon Sep 17 00:00:00 2001 From: cheney Date: Fri, 22 Jul 2022 21:11:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ doc/黄金交易所数据库加密 java 接口新增.docx | Bin 26712 -> 26847 bytes kit.json | 20 +++++++++-- pom.xml | 7 +--- .../java/com/sunyard/sge/database/Consts.java | 6 ++++ .../java/com/sunyard/sge/database/SydApi.java | 6 ++++ .../sunyard/sge/database/SydApi4Database.java | 8 +++++ .../sunyard/sge/database/pool/SydApiPool.java | 3 +- .../java/com/sunyard/sge/log/LogFactory.java | 11 +++--- src/test/java/sample/Sample.java | 34 +++++++++++++----- src/test/java/test/LogTest.java | 2 +- 说明.txt | 3 +- 12 files changed, 77 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 6bc1de7..1be8a42 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /.idea/ /target/ /pack/ +/logs/ +/test-log/ diff --git a/doc/黄金交易所数据库加密 java 接口新增.docx b/doc/黄金交易所数据库加密 java 接口新增.docx index 106219f1b9433741bfdb03ee8640ac1e9e067776..3e32d301b6c2cd2d69014e0c8c45153df29ed234 100644 GIT binary patch delta 14642 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≫*gun}F~Ikz}tcZR%u9M?RDT8tCnh2z4j~dYm-1UGFS%gVk)iChnH) zpq27BsKQjsqZk)fP5i|%$aa-xta))fS0@#{*=k&5)>N(hXWDNSAT( zUudldatwLoUUW?=$l(d9`NUrNML^et76&O+)`F7jxU6OggQo{)sCm>eVQR{6UY>km zj}4x$-#_wHN}}Ko=p4o&p7-diT6RBR8GdM#gsbNZ%YJWq#a~}1vC|bvXzBSNx?qxy zwp{<@>sX&(IKNj|F#?z5ae0U!l%l-6_c?dLLsL{7g)A*gF4*Qi+k&LqdIpA|i1@fJ zL_>v#h7W>Ck6nsGf+exK)y*I1%T%=Ze_~1(==W|0g?$FvYEI4MXv0wV9AAJ^>yXv) zBvoj?{PEa|e~krswG(f#K#l2p6Vthy(W!L}!IQtDyNB1x)s<}yU&E4Tfr+F=@#EQ9 zGgTi(6e7VJa8&QZp_!OD>;X6y$}7oP=H0ik4cuUPCM<{s{-|*>uAxm0 zR!wc2XKa!;432IaucAzj6HLBk^91qZw4+@5#ksGsV8qEP>5IF#1c_pEm8}M(=l1FT zIy0%2%ZmNO83>rGp`HTVInhj>M7W~4+1{9FJFEJl0XDUP=r=rMkAS`dN)7x({nq7p z=X$ig3v4Scrb6OW!}T4Pj#?GHJhzz!w6GmRsJhc)Gy16rnfDdE&e1PFs|ckXWnS2S z3*{}uu~vu5c1TosZ1sYW5N6-h2@prJq_t-ZkoUL4!)1 zC8_;cHpmtrXnOE^z^d4vyu;;dvUn1v-~?PT*@p&2O|3Oe&5!TvZuRY=-UU zNgD)SGgab;u~5R@dp{X;L9eUdE|5APJq!xYAE(&xRA zhwk=;N(z>XiCX%5+AUk>y1qYjB+Rtv7t^&6w7wvPoX}%^fQwZ@T;jK7H)23raD~G; zA)BF~iHKA03uvtyI$g;r#+Vlsu_^~+1FSdqm#Ix?AQB(pU$4aGB-bvgmM{A7&`k(r z+%pb})A+2=v@5X~%^k&Hu4<4HK5xvf%#Q0iFJ2IHDq9^D zM)kpOwLhKB+#t}n+vTJ>sMMxi!dZP2Y(d(e`e7{S(W379@^)FMPOhZT+1yhh@Dj0?;n>)YSoORR|Pud zpRr`h2X$)1tV>Fsw|LH&@I9=t=q+km;2xiJY1~Fi^VVy_Z!>sMn&LGsXQFq?TL-^d1s`L|6pjarg|wz(2~ne z<3|EBJ)X+D)J+#x#Mz@!WQo>rKS;uUg=NrTshr(fVMY&NM|(3ONOLJ$1$lFx7K5i8 z(_whWz#}Sr%^;HPrd2wlN}y$UgJ(MWUTYOV^~?1U;@ z-xJyAp#$9M19Cj%@FO;9v|D))B*3e`eyOB4)$&$}Uxc468qO*nkw(zP#?j@LvB3oz z2V@I}emn(hsiy8oYQ@uQY9&xpjIdC^QP-<#3EMMBXsvo5(o<;x8LA5@;3JGhKGJs_ z=GP6^zFlAHJ+W_QHOAt9#X+cKVZyhfAIPVlbgETls#;&gj9w;U!|H41bD;&Hor#2S zh5n4KERB(-7dVb%SbvQH-}psINrMTj3I({iB^K+&O(@hz)2Uq>B%)j1QBuO_(J$GIrs&bO$@2OF0R6LUW50U>Pl$1sL@D5Mrt0?IU`} zvD5t#j2;6wA0)mhh+b^ZGsKiJWB5+q-$hea@y)K7P^I2_jvbsixF>_D?Vb$~)668? zWqL*mLGbn+G9vAdUx6(hR{p)xA+V5oFFSzDhKCAX5jZeVo>Ql2DVn><`;7ieAMZm6 z(R>~MR7T)*T)q*m;w|0rv<`kt_+keaOGQ9$?>X(T+2(0}`h2;+7t-5O(A$>x;tj%^ z7T$oXz63gptkn?TpkE$8Vh0ttkZ;zrNWB=X>|(k^@fJKpS-T!*bhQWVEwPpH$e4Wc zTt736Tv>ZLDSp|aBjk=+`r90WqV;GovgT7?>6MYlN7<>s5shoff*+FXzZ-62k`DT+os8(?bmQunj%WQd%e%GCP{?Vop8rI9n%FpQf}sG=Ne=rfP8fnP z|8Pc4RLL+v8<8;YPUgcZts0`Dd^IGyziFumFTy{NKo$=K7GF zzL4KlD69MU|6%pq!v6&R7Ug4o4DU{WPWKN_a}zU)N!|6;23gC`HqdvW%I^-l2~0Hi zW5L(SE6a+mr3r`wMmaIiuM7Wbk+6+Gu~K5brRp(iS*uIl{k`hTpS>-|f(~dp78Lg- zciC4}>wi58>nP16m?Yc0vo}}bj@GBMYevt7>Xu^W@mwR&@Q4GVeP=A`!n$NpRd*pj zVR@Gp6Tf~=d-_=m_V3#n&PY%&rd~XAcXoET`N6mf^-Ciz{6cBEc^)~BcldLc31#ij z4>usk^FU^u{rieUK(-btuCpMYtpJJ0;)w-3svo`d@Xmud^+X*K7O8U&j`wF^4YwvS?piAblh;} zl*e&9*K`g*9|?u%!GKhYuBjkDV$X$S z@C~fN%?+LA*z^HQh{@IMGT^!8`P9JS76&SVPlKv0?Kg0b%A%+^Q2Nuam))g8_n%dX zZzGF_GU4^c#bxxqYIHoZzM%LYrv-jQS>1F4T_IC23`<8Oo>7#_n#%1?cYkg_H@{AG z)*>LHZ5xmZMxr)DKKZsqmzW6=JyBM<=Ip~3@V78xt{p%x8zI;h8cjt9rDW9VsMI2w zl>g@CX4z~`=XF)Cjo}o=vQfA9Sn`5!o7wk>i~_4+#l4reSLH=Wh(yDcK;RF-;BsC{ zPx=rH3=-f@7vH^3u8|wpYW>rOZa22yBZ-H_E)9I^(REPDVf7rK3G0+KWyKSA70VeM zhHlhl?^L2ONSaeE%18vq?sd7(To@8sGjRtwSUTp%o|VVcdru5iXly_#cl;>goBV zjvd*0IjjiHn{o3gAip<@+lh$K#CBKW3k_7`#>_2AUwzi)*uC#&cuD)lo(*Y?G)@WB zf+g_cQa57`nB35&k;!4kS;4=;nEd4oU;)7?Lw?i-R4+ulzb59ehTtpz{NS$R{#i3| zc4P}~JIIF1rNQQqYRZ5wzayQ1%L3T!lE3WCNbPz$mi+>(PKPTx zNlJ99znwIvFt6X8uPs{fYAoH8u^XcfBKRZ_re*!p1U?Pse$;DysPb&97%@u?HFFJu zrqP%;7kVgBIEM|8<NxWPr3UA$WXA z@|;Wo%q6)VQc{eJb+bcGcV)k`Mi%4NED~j~n#bO~2PUvQ(c*s`>L#YxSc_!mr%0Yg z?_MSbD*CCXzoM1XbA+LvrEpUwgt$?p9(c%}5_$K5XOocJvD=-;t5mz4>YBru|5%Iv zt92OjYdYy!&pMC>jW)7w@e6>4ij?`jtePyp^27y~;>g*tNbPqL)p)pd9fx0-NY!0G`YI&sfUJ+9sRFE8injT=_lAa@KJW3pov~yR( zr~n#`X}wX|ff(mz*&uP=c!s8P-en2i=GE{yN%USvD_kjx!#sgE!v+TRjpwRbErbyg zJ7g<%`!>P!El@KR=_HbAXQ{trjR*a2%W!yfSRnOg-wIoiK|2%6w1mTRA+2O|e#xT~ zCfgye8i%&Y`Wo~0bMel;RWr+tjP)rSCI@|)9wU&B63R=AwqCjutFtZhu10+GjXI1i zyBFV>b}DZV@M!m)Gff!E+^FlV7cn88?+#M(%&IxEYx^&47 z-2~NBE0m9I@5@8IYwx}EOG6v@q)+Sbe>9f$NZNfR(4`s~2wz1!)IUaHN#@9PN%}7$ z>s=hIOZnVBK8RYfxAc~O|H6dTfo?K#Gs^S^nc{#k7{Oapq!06f`qdY)G^CLYUON7t zHH-{Qki1>Dek>sLka^L`yLpQ?o;DXd?=fZ#4U}#X2xfN5@D6}^(lBL*QAC$o{U&}I zEhoA|27ZOF_}J*!kJr0-l6@nwS_}0u|Y6Ts*?`< zdJ~MinVT?vG(-4^TYI+rgD9mBqnhrgZK}ayvQD{&Lb~W=2jua8lyX7i<;&`Z6t!&g zi5H7Z(Gucgaz5>l$ee0@U|Zs<9WK=yD;cTFjjKPv*)yHV5&FNBz&W>QAXj}{!j7VP zInntW)89F?W6k;8&eHZKEFJAO-POkodM?@dAxF7vJoK%J08_k!B4hE}rkDkIE38Ik z4OiZ2fuYH#Dm>573clQjMC&VMR{NNR2_fSutXHK>iclCY`fwUMZOcENF%wZSi2{#F zN*djJXUfvz2q2d<%Eo<4K%($ZjMhVhUue)j^n#u$_OkRBoFfiNxa>KVfZy83KPWp5aM;Az@O@E*kH`9gm4zw zNlIn($b9c@Zs~@Rc8U<4qPP^QDGIhXzIJHo2CJVXUB8ux1!Ut9fiFg2ikU(9JSyRP zc7eT)$)#?QAR&S`o{Y7!3G=z%I`)~pVXNRQBVw4*?ffy3Xw)URb3e2dPoWfa{wUra zIGhbwwd=3eOyh?4U@bTZ{fBf8iBB80qdbLj8AEImL(!>l;ZLma=$QRjHlM|QZ85IH zmCKY*j#k49Z~LczIrjJww78A)NBn5rnp{=>ZQf*2Wuz`)Kb0mQhH)vrMrrv?*!Fw9 zIUC>U0GpC0XB8YmxR}y$P9YqE)50O%!De*XS^!TIbZbbF_-LaJRX|rl;Rr?+=R-)) zDK@+bz7eIR&f!v4f;pM81AP&Hs`0_GD^NHUv5Ikmp0cjNl7H3Br_=T?m%Y`JVwpH6tgP(L zeO`zDNd_OY^ADL)BFi@ZSY(okx&^aXiZVj^6#p}!07n|Dm%6lcu-a?uO75`IpnZ9< z;b-9#kS|zK$8s5}o=Jij6`JEA8MMkQ^*d zfUOM&;a(0ebFO`S>+y?-YuyN7(AqEe-~@iI1`S` zK5*EP29Bg&SkIAK-0#EAbv$d$8tV-yN8)CH9)ERynZaX^( zQzCqe|B?ebL?|Q+U@sD=>O#tJyUb|y-O@LSgqis7IL8tbej3sTj3Lj0-!mSZyS=o> zJRKHiW+?&-+-AqKmxEL7^KrAtxQr&goEy1M|DRz)`kks{Zp@Kz(;NW3JbxD2cE?K{ zet{*J5<4}TeWOz!`K|`9DJhLsqR2DOxdJOtQuhU>^G#@7nx{YYTEc>$;Qhj|$8a>( znZ@-p3O{TOi?lsIE^+{CtDt8@n6UH7rR_cx_K70a2XqWR{q=Xt_-*m|n`de3Lzd#@ zuHYsCbb2sXk++aVUnRi53V39!G=EJ_*sY>vr@-zcRNIMNxhyF_G!ACPi~AI=ymZEe zXS@oBFlqOOypyq`PFezinMc*NPY**IM1d})4;!e~AUZhUI(gN;!9!>MpD#PC-nxBO zbIU~`oi|Yrjd-1rP-i|VT{^MqZ(h_z(L|*L(b}?kZ!v(yAB_mMuv4>}t?XE2wB&{LoFPzlx@5a7J0mvseK<0B>zhQR5&0liRcoKhD5Qn*l9Wp78ALJ)=Mo{^Y�|<{t1~#&|IXc z2MxrL_ag;Ef`Q@un{L7QzsXT+7iUjRGjm6)|3pW7v^SmC*syx@TfC#(w@2ZFp)~cu z9ZEJ87uM{SY493w){}^Ty?}MCEwxPcNIrsTJaSdH^p1Sb4TF)zQ**4+oO%1|Mib2@=xoKf(5H@Bm0X)~Z^!3GkmsnTFKg9e2r~LB3t@f~bGKot&xutof zsMnBJO%nV1AT&9jw_o9-jHf+DK~3bW9B#=Mn(uzd#w5xzU##1JW#g%cnQbIUB0=0G zOZhlKQKmtVqC;WKHptn$l|&UB7gEiyq?P5=q0&~Gn4%ezNe69XEti*I2K>^oGXxmX ziyN`z6`L*i;!-Zh=PFG*VyAf1S8!te>un5Wg_Oa%O3&8IpNxT^Xj@OL|LyFT8IdBDjTwzsVpJa=hQys8K5#0Sn3Mdltz860{3L=x@ zFHc9)A~;ux0>9#_lpc_j+zEAoDw5vgh99bx6lbnfe~y2Lb3?K9KjP09rw1E?qYz&q zaYirdibcytwpGGKM#bd$y9buHay}&|*la zLD0_~Jk>I_(p*~cK!;W3r_DnYy7IB^JdBJ~nIi!J=FHV8<@7AHK`pkm&a(SF5X@3o zebuRO{Eei`aPMMyI)9z?aa%Ohh^v4dii-Nndw>eJ0Y zwHmY}Z&{8mgRRmjObbUI0U~P+*4hogi+El|UF*~pmr~#?EffSM6w)}FU39Hl4uJoA zv6@C>&=6IoDa00{5Y2`u#ugl?%Z6ZJChk^_9;__?sVQjIL@8YsC=j_CDU%jF5bs7Q z1;$t@wiYNU)RqL`j45K43J@b2De;z~5V4vmGnV=PH7Mw2H33eUB52JAp=gqFX+pxN zssIjw1%~ynBfx=0D({K?&xHBE4KQ#pvVXNPrPo>nTt4O9nu_p$c9Z`;1(70TBMQ!w p5?~_=QKpsBV?*`-4b`Qb*~EbxrTEzLfk&h?+S0+;oB!wL{{p%==6V1C diff --git a/kit.json b/kit.json index 80e8199..4921101 100644 --- a/kit.json +++ b/kit.json @@ -5,7 +5,7 @@ }, "clear": [ { - "func": "rmdir", + "func": "rm", "path": "%out_path%" } ], @@ -31,6 +31,12 @@ "cmd" : "dproto" }], "build": [ + { + "cmd": "clear" + }, + { + "cmd": "init" + }, { "shell": "mvn package -DskipTests", "check": "BUILD SUCCESS" @@ -49,9 +55,19 @@ "from": "./doc", "to": "%out_path%/doc" }, + { + "func": "cp", + "from": "./src/test/java/sample", + "to": "%out_path%/sample" + }, { "func": "zip", - "from": "./%out_path%/*", + "from": "%out_path%/*", + "to": "%out_path%/sydapi-%version%.%project.git_commit_hash%.zip" + }, + { + "func": "open", + "path": "%out_path%/", "to": "%out_path%/sydapi-%version%.%project.git_commit_hash%.zip" } ] diff --git a/pom.xml b/pom.xml index b206c3e..01c3e9f 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ com.sunyard sydapi4j - 1.0.20220712 + 1.0.20220722 @@ -46,11 +46,6 @@ log4j-slf4j-impl ${log.version} - - org.apache.logging.log4j - log4j-jcl - ${log.version} - diff --git a/src/main/java/com/sunyard/sge/database/Consts.java b/src/main/java/com/sunyard/sge/database/Consts.java index 7df5eae..62c40b5 100644 --- a/src/main/java/com/sunyard/sge/database/Consts.java +++ b/src/main/java/com/sunyard/sge/database/Consts.java @@ -5,6 +5,12 @@ public class Consts { public static final int ECB_ENC = 1; + public static final int LogLevelOFF = 0; + public static final int LogLevelError = 1; + public static final int LogLevelInfo = 2; + public static final int LogLevelDebug = 3; + + // 唯一包 public static final int PkgNumAll = 0; diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index 19d23cd..915f3cd 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -1,5 +1,9 @@ package com.sunyard.sge.database; +import com.sunyard.sge.log.LogFactory; +import org.slf4j.Logger; +import racal.sunyard.main.SydApi4j; + import java.util.List; /** @@ -23,6 +27,8 @@ public interface SydApi { String pcLogPath, int iLogLevel) { + Logger logger = LogFactory.createLogger(pcLogPath, iLogLevel); + SydApi4j.setLogger( logger ); } /** diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 99f36b1..f101abe 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -14,6 +14,14 @@ public class SydApi4Database implements SydApi { private SydApi4j[] hsms = null; + @Deprecated + public SydApi4Database() { + } + + public SydApi4Database(SydApi4j[] hsms) { + this.hsms = hsms; + } + @Override public SydApi SYD_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { SydApi4j api = (SydApi4j) new SydApi4j().connect(pcIpList[0], iPortList[0], null, iConnectTimeOut); diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java index e211822..b2c1201 100644 --- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java +++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java @@ -1,6 +1,7 @@ package com.sunyard.sge.database.pool; import com.sunyard.sge.database.SydApi; +import com.sunyard.sge.database.SydApi4Database; import com.sunyard.sge.pool.ThreadBasedConnectPool; import racal.sunyard.main.SydApi4j; @@ -36,7 +37,7 @@ public class SydApiPool extends ThreadBasedConnectPool { } } - return null; + return new SydApi4Database( apis ); } // 保活接口 diff --git a/src/main/java/com/sunyard/sge/log/LogFactory.java b/src/main/java/com/sunyard/sge/log/LogFactory.java index b4de299..7e3c357 100644 --- a/src/main/java/com/sunyard/sge/log/LogFactory.java +++ b/src/main/java/com/sunyard/sge/log/LogFactory.java @@ -1,5 +1,6 @@ package com.sunyard.sge.log; +import com.sunyard.sge.database.Consts; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Appender; @@ -27,11 +28,7 @@ public class LogFactory { public static final String logName = "sge-hsm-sydapi-log"; // 日志级别 - public static final int LogLevelOFF = 0; - public static final int LogLevelError = 1; - public static final int LogLevelInfo = 2; - public static final int LogLevelDebug = 3; - public static int iLogLevel = LogLevelDebug; + public static int iLogLevel = Consts.LogLevelOFF; // Levels public static final Level[] levels = new Level[]{ Level.OFF, Level.ERROR, Level.INFO, Level.DEBUG }; @@ -100,7 +97,9 @@ public class LogFactory { * 创建 Logger * @return Logger */ - public static Logger createLogger() { + public static Logger createLogger(String pcLogPath, int iLogLevel) { + LogFactory.pcLogPath = pcLogPath; + LogFactory.iLogLevel = iLogLevel; start(); return LoggerFactory.getLogger( logName ); } diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java index 61cd58a..9747f69 100644 --- a/src/test/java/sample/Sample.java +++ b/src/test/java/sample/Sample.java @@ -3,7 +3,9 @@ package sample; import com.sunyard.proto.Util; import com.sunyard.sge.database.*; import com.sunyard.sge.database.Consts; +import com.sunyard.sge.log.LogFactory; import org.junit.Assert; +import org.slf4j.Logger; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -13,16 +15,30 @@ public class Sample { public static void main(String[] args) { - System.setProperty("com.sunyard.sydapi4j.debug", "true"); + // 路径要以 / 或 \\ 结尾表示目录 + SydApi.SYD_SetLogConfig("./logs/", Consts.LogLevelDebug ); - SydApi api = new SydApi4Database(); + Logger log = LogFactory.getLogger(); + log.info("start"); + + // 通常单例就够了 + SydApiBuilder builder = new SydApiBuilder( + new String[]{ "192.168.0.200" }, + new int[]{ 8889 }, + 10, + 15 + ); + + // 每个工作线程中调用 + SydApi api = builder.build(); try { - api = api.SYD_Connect_Ex( - new String[]{ "192.168.0.200" }, - new int[]{ 8889 }, - 10, - 15 - ); + // 不建议使用了 +// api = api.SYD_Connect_Ex( +// new String[]{ "192.168.0.200" }, +// new int[]{ 8889 }, +// 10, +// 15 +// ); // 短数据加密解密 @@ -54,6 +70,8 @@ public class Sample if ( null != api ) { api.SYD_Disconnect_Ex(); } + System.out.println("all over"); + log.info("all over"); } } diff --git a/src/test/java/test/LogTest.java b/src/test/java/test/LogTest.java index b0edd79..a89c4b3 100644 --- a/src/test/java/test/LogTest.java +++ b/src/test/java/test/LogTest.java @@ -6,7 +6,7 @@ import org.slf4j.Logger; public class LogTest { public static void main(String[] args) { - Logger log = LogFactory.createLogger(); + Logger log = LogFactory.createLogger("./test-log/", 2); log.error("error"); log.info("info"); log.debug("debug"); diff --git a/说明.txt b/说明.txt index b5d8a47..f197c5d 100644 --- a/说明.txt +++ b/说明.txt @@ -6,4 +6,5 @@ - groovy-all-2.3.2 通信协议支持 - proto-1.0-20220412 通信协议支持 - slf4j-api-1.7.10 日志接口 - - sydapi-1.12.dd63df.jar 加密机通信包 + - sydapi4j-1.0.20220722.jar 加密机通信包 + -