7e95303090df4f2a6cfc5d58006d211cd0d222c9
1 package ro
.ieval
.fonbot
;
3 import static ro
.ieval
.fonbot
.Utils
.toNonNull
;
5 import java
.io
.IOException
;
6 import java
.net
.HttpURLConnection
;
7 import java
.net
.MalformedURLException
;
9 import java
.util
.ArrayList
;
10 import java
.util
.List
;
12 import org
.eclipse
.jdt
.annotation
.Nullable
;
13 import org
.json
.JSONArray
;
14 import org
.json
.JSONException
;
15 import org
.json
.JSONObject
;
17 import ro
.ieval
.fonbot
.Address
.Protocol
;
18 import android
.os
.AsyncTask
;
19 import android
.util
.Log
;
22 * Copyright © 2013 Marius Gavrilescu
24 * This file is part of FonBot.
26 * FonBot is free software: you can redistribute it and/or modify
27 * it under the terms of the GNU General Public License as published by
28 * the Free Software Foundation, either version 3 of the License, or
29 * (at your option) any later version.
31 * FonBot is distributed in the hope that it will be useful,
32 * but WITHOUT ANY WARRANTY; without even the implied warranty of
33 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34 * GNU General Public License for more details.
36 * You should have received a copy of the GNU General Public License
37 * along with FonBot. If not, see <http://www.gnu.org/licenses/>.
41 * AsyncTask that polls the server for pending commands and executes any commands found.
43 * @author Marius Gavrilescu <marius@ieval.ro>
45 public final class PollServerAsyncTask
extends AsyncTask
<Void
, Void
, List
<PollServerAsyncTask
.Command
>> {
47 * POJO that represents a command in a basic form: a command name, a list of arguments and a reply address, all of them being strings
49 * @author Marius Gavrilescu <marius@ieval.ro>
55 final String command
;//NOPMD no confusion here
57 * The list of command arguments
61 * The reply address, excluding the protocol
66 * Construct a Command from its three parts
68 * @param command the command name
69 * @param args the command arguments
70 * @param replyto the reply address
72 Command(final String command
, final String
[] args
, final String replyto
) {//NOPMD array is immutable
80 protected List
<Command
> doInBackground(final @Nullable Void
... params
) {
81 Log
.d(getClass().getName(), "Polling server");
82 final List
<Command
> commands
=new ArrayList
<Command
>(10);
84 final URL url
=new URL("http://ieval.ro:7777/get");
85 final HttpURLConnection conn
=(HttpURLConnection
) url
.openConnection();
86 conn
.setRequestProperty("X-ID", FonBotApplication
.instance
.regID
);
88 final byte[] buf
=new byte[4096*1024];
89 Log
.d(getClass().getName(), "Server poll got response code "+conn
.getResponseCode()+" and message "+conn
.getResponseMessage());
90 if(conn
.getResponseCode()!=200)
92 conn
.getInputStream().read(buf
);
93 final JSONArray array
=new JSONArray(new String(buf
));
94 final List
<String
> list
=new ArrayList
<String
>();
95 for(int i
=0;i
<array
.length();i
++){
96 final JSONObject object
=array
.getJSONObject(i
);
98 for(int j
=0;object
.has("arg"+j
);j
++)
99 list
.add(object
.getString("arg"+j
));
101 commands
.add(new Command(//NOPMD command changes for each JSON object
102 toNonNull(object
.getString("command")),
103 toNonNull(list
.toArray(new String
[list
.size()])),
104 toNonNull(object
.getString("replyto"))));
107 } catch (MalformedURLException e
) {
109 } catch (IOException e
) {
111 } catch (JSONException e
) {
115 throw new AssertionError("commands is null in PollServerAsyncTask#doInBackground");//silence Eclipse bug
120 protected void onPostExecute(final @Nullable List
<Command
> commands
) {
123 for (Command command
: commands
) {
124 Log
.d(getClass().getName(), "Poll got command "+command
.command
+" with "+((command
.args
.length
==0)?
"no args":"args "+Utils
.join(
125 " ",toNonNull(command
.args
))));
126 Utils
.processCommand(
127 toNonNull(FonBotApplication
.instance
),
128 toNonNull(command
.command
),
129 toNonNull(command
.args
),
130 new Address(toNonNull(Protocol
.HTTP
), command
.replyto
));//NOPMD address depends on command
This page took 0.022992 seconds and 3 git commands to generate.