1 package ro
.ieval
.fonbot
;
3 import static ro
.ieval
.fonbot
.Utils
.toNonNull
;
5 import java
.io
.InputStream
;
6 import org
.eclipse
.jdt
.annotation
.Nullable
;
8 import org
.json
.JSONArray
;
9 import org
.json
.JSONObject
;
11 import android
.content
.Context
;
12 import android
.os
.Handler
;
13 import android
.os
.Looper
;
14 import android
.util
.Log
;
16 import ro
.ieval
.fonbot
.Address
.Protocol
;
17 import ro
.ieval
.fonbot
.HttpCallExecutableRunnable
.ResultCallback
;
20 * Copyright © 2013 Marius Gavrilescu
22 * This file is part of FonBot.
24 * FonBot is free software: you can redistribute it and/or modify
25 * it under the terms of the GNU General Public License as published by
26 * the Free Software Foundation, either version 3 of the License, or
27 * (at your option) any later version.
29 * FonBot is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU General Public License for more details.
34 * You should have received a copy of the GNU General Public License
35 * along with FonBot. If not, see <http://www.gnu.org/licenses/>.
39 * ResultCallback implementation that polls the server for pending commands.
41 * @author Marius Gavrilescu <marius@ieval.ro>
43 final class PollResultCallback
implements ResultCallback
{
44 /** Context instance */
45 private final Context context
;
48 * Construct a <code>PollResultCallback</code> with a Context.
50 * @param context Context instance
52 public PollResultCallback(final Context context
) {
57 public void onResult(final int responseCode
, final String responseMessage
, final @Nullable InputStream inputStream
) {
58 if(responseCode
!=200 || inputStream
==null)
61 final Handler handler
=new Handler(Looper
.getMainLooper());
64 final JSONArray array
;
66 final byte[] buf
=new byte[2048*1024];
67 final int length
=inputStream
.read(buf
);
68 array
=new JSONArray(new String(buf
, 0, length
));
71 for(int i
=0;i
<array
.length();i
++){
72 final JSONObject object
=array
.getJSONObject(i
);
74 final JSONArray jsonargs
=object
.getJSONArray("args");
75 final String command
=object
.getString("command");
76 final Address replyTo
=new Address(toNonNull(Protocol
.HTTP
), object
.getString("replyto"));//NOPMD address depends on command
77 final String
[] args
=new String
[jsonargs
.length()];
78 for(int j
=0;j
<args
.length
;j
++)
79 args
[j
]=jsonargs
.getString(j
);
81 Log
.d(getClass().getName(), "Poll got command "+command
+" with "+((args
.length
==0)?
"no args":"args "+Utils
.join(
82 " ",toNonNull(args
))));
84 handler
.post(new Runnable() {
100 public void onError(final String error
) {
101 Log
.e("PollResultCallback", "onError: "+error
);