1919import java .net .Socket ;
2020import java .nio .charset .Charset ;
2121import java .util .ArrayList ;
22- import java .util .HashMap ;
2322import java .util .Iterator ;
24- import java .util .Map ;
2523import java .util .concurrent .LinkedBlockingQueue ;
2624
2725/**
@@ -46,8 +44,6 @@ public SocketClient(@NonNull String remoteIP, int remotePort, int connectionTime
4644 setRemoteIP (remoteIP );
4745 setRemotePort (remotePort );
4846 setConnectionTimeout (connectionTimeout );
49-
50- registerQueryResponse (SocketPacket .DefaultPollingQueryMessage , SocketPacket .DefaultPollingResponseMessage );
5147 }
5248
5349 /* Public Methods */
@@ -101,6 +97,15 @@ public void disconnect() {
10197 getUiHandler ().sendEmptyMessage (UIHandler .MessageType .Disconnected .what ());
10298 }
10399
100+ /**
101+ * 与{@link #send(byte[])} 相同,增加一个别名
102+ * @param data
103+ * @return
104+ */
105+ public SocketPacket sendBytes (byte [] data ) {
106+ return send (data );
107+ }
108+
104109 /**
105110 * @param data
106111 * @return
@@ -109,11 +114,27 @@ public SocketPacket send(byte[] data) {
109114 if (!isConnected ()) {
110115 return null ;
111116 }
112- SocketPacket socketPacket = new SocketPacket (data );
117+ SocketPacket socketPacket = new SocketPacket (data , isSupportReadLine () );
113118 getSendThread ().enqueueSocketPacket (socketPacket );
114119 return socketPacket ;
115120 }
116121
122+ /**
123+ * 与{@link #send(String)} 相同,增加一个别名
124+ * @return
125+ */
126+ public SocketPacket sendString (String message ) {
127+ return send (message );
128+ }
129+
130+ /**
131+ * 与{@link #send(String, String)} 相同,增加一个别名
132+ * @return
133+ */
134+ public SocketPacket sendString (String message , String charsetName ) {
135+ return send (message , charsetName );
136+ }
137+
117138 public SocketPacket send (String message ) {
118139 return send (message , getCharsetName ());
119140 }
@@ -122,7 +143,7 @@ public SocketPacket send(String message, String charsetName) {
122143 return send (message , Charset .forName (charsetName ));
123144 }
124145
125- public SocketPacket send (String message , Charset charset ) {
146+ protected SocketPacket send (String message , Charset charset ) {
126147 if (!isConnected ()) {
127148 return null ;
128149 }
@@ -151,29 +172,6 @@ public boolean isConnecting() {
151172 return getState () == State .Connecting ;
152173 }
153174
154- public SocketClient registerQueryResponse (String query , String response ) {
155- return registerQueryResponse (query , response , getCharsetName ());
156- }
157-
158- public SocketClient registerQueryResponse (String query , String response , String charsetName ) {
159- return registerQueryResponse (query .getBytes (Charset .forName (charsetName )), response .getBytes (Charset .forName (charsetName )));
160- }
161-
162- public SocketClient registerQueryResponse (byte [] query , byte [] response ) {
163- getQueryResponseMap ().put (query , response );
164- return this ;
165- }
166-
167- public SocketClient registerQueryResponse (HashMap <byte [], byte []> queryResponseMap ) {
168- getQueryResponseMap ().putAll (queryResponseMap );
169- return this ;
170- }
171-
172- public SocketClient removeQueryResponse (String query ) {
173- getQueryResponseMap ().remove (query );
174- return this ;
175- }
176-
177175 /**
178176 * 注册监听回调
179177 * @param delegate 回调接收者
@@ -406,6 +404,8 @@ public void onFinish() {
406404
407405 /**
408406 * 当前连接状态
407+ * 当设置状态为{@link State#Connected}, 收发线程等初始操作均未启动
408+ * 此状态仅为一个标识
409409 */
410410 private State state ;
411411 protected SocketClient setState (State state ) {
@@ -420,14 +420,14 @@ public State getState() {
420420 }
421421
422422 /**
423- * 自动应答键值对
423+ * 自动应答
424424 */
425- private HashMap < byte [], byte []> queryResponseMap ;
426- protected HashMap < byte [], byte []> getQueryResponseMap () {
427- if (this .queryResponseMap == null ) {
428- this .queryResponseMap = new HashMap < byte [], byte []>( );
425+ private PollingHelper pollingHelper ;
426+ public PollingHelper getPollingHelper () {
427+ if (this .pollingHelper == null ) {
428+ this .pollingHelper = new PollingHelper ( getCharsetName () );
429429 }
430- return this .queryResponseMap ;
430+ return this .pollingHelper ;
431431 }
432432
433433 private ConnectionThread connectionThread ;
@@ -511,17 +511,17 @@ protected ArrayList<SocketPollingDelegate> getSocketPollingDelegate() {
511511 return this .socketPollingDelegate ;
512512 }
513513 public interface SocketPollingDelegate {
514- void onPollingQuery (SocketClient socketClient , byte [] pollingQuery );
515- void onPollingResponse (SocketClient socketClient , byte [] pollingResponse );
514+ void onPollingQuery (SocketClient socketClient , SocketResponsePacket pollingQueryPacket );
515+ void onPollingResponse (SocketClient socketClient , SocketResponsePacket pollingResponsePacket );
516516
517517 class SimpleSocketPollingDelegate implements SocketPollingDelegate {
518518 @ Override
519- public void onPollingQuery (SocketClient socketClient , byte [] pollingQuery ) {
519+ public void onPollingQuery (SocketClient socketClient , SocketResponsePacket pollingQueryPacket ) {
520520
521521 }
522522
523523 @ Override
524- public void onPollingResponse (SocketClient socketClient , byte [] pollingResponse ) {
524+ public void onPollingResponse (SocketClient socketClient , SocketResponsePacket pollingResponsePacket ) {
525525
526526 }
527527 }
@@ -593,6 +593,7 @@ protected void onConnected() {
593593
594594 getHearBeatCountDownTimer ().start ();
595595
596+
596597 ArrayList <SocketDelegate > delegatesCopy =
597598 (ArrayList <SocketDelegate >) getSocketDelegates ().clone ();
598599 int count = delegatesCopy .size ();
@@ -626,15 +627,14 @@ protected void onReceiveResponse(@NonNull SocketResponsePacket responsePacket) {
626627 return ;
627628 }
628629
629- for (Map .Entry <byte [], byte []> entry : getQueryResponseMap ().entrySet ()) {
630- if (responsePacket .isMatch (entry .getKey ())) {
631- onReceivePollingQuery (entry .getKey ());
632- return ;
633- }
634- if (responsePacket .isMatch (entry .getValue ())) {
635- onReceivePollingResponse (entry .getValue ());
636- return ;
637- }
630+ if (getPollingHelper ().containsQuery (responsePacket .getData ())) {
631+ onReceivePollingQuery (responsePacket );
632+ return ;
633+ }
634+
635+ if (getPollingHelper ().containsResponse (responsePacket .getData ())) {
636+ onReceivePollingResponse (responsePacket );
637+ return ;
638638 }
639639
640640 ArrayList <SocketDelegate > delegatesCopy =
@@ -656,24 +656,24 @@ protected void onReceiveHeartBeat() {
656656 }
657657
658658 @ CallSuper
659- protected void onReceivePollingQuery (byte [] pollingQuery ) {
660- send (getQueryResponseMap ().get ( pollingQuery ));
659+ protected void onReceivePollingQuery (SocketResponsePacket pollingQueryPacket ) {
660+ send (getPollingHelper ().getResponse ( pollingQueryPacket . getData () ));
661661
662662 ArrayList <SocketPollingDelegate > delegatesCopy =
663663 (ArrayList <SocketPollingDelegate >) getSocketPollingDelegate ().clone ();
664664 int count = delegatesCopy .size ();
665665 for (int i = 0 ; i < count ; ++i ) {
666- delegatesCopy .get (i ).onPollingQuery (this , pollingQuery );
666+ delegatesCopy .get (i ).onPollingQuery (this , pollingQueryPacket );
667667 }
668668 }
669669
670- protected void onReceivePollingResponse (byte [] pollingResponse ) {
670+ protected void onReceivePollingResponse (SocketResponsePacket pollingResponsePacket ) {
671671
672672 ArrayList <SocketPollingDelegate > delegatesCopy =
673673 (ArrayList <SocketPollingDelegate >) getSocketPollingDelegate ().clone ();
674674 int count = delegatesCopy .size ();
675675 for (int i = 0 ; i < count ; ++i ) {
676- delegatesCopy .get (i ).onPollingResponse (this , pollingResponse );
676+ delegatesCopy .get (i ).onPollingResponse (this , pollingResponsePacket );
677677 }
678678 }
679679
0 commit comments