2a4a21d60fe73661bdc9b652f3647eb4a7d791bd
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
.content
.Context
;
19 import android
.os
.AsyncTask
;
20 import android
.util
.Log
;
23 * Copyright © 2013 Marius Gavrilescu
25 * This file is part of FonBot.
27 * FonBot is free software: you can redistribute it and/or modify
28 * it under the terms of the GNU General Public License as published by
29 * the Free Software Foundation, either version 3 of the License, or
30 * (at your option) any later version.
32 * FonBot is distributed in the hope that it will be useful,
33 * but WITHOUT ANY WARRANTY; without even the implied warranty of
34 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 * GNU General Public License for more details.
37 * You should have received a copy of the GNU General Public License
38 * along with FonBot. If not, see <http://www.gnu.org/licenses/>.
42 * AsyncTask that polls the server for pending commands and executes any commands found.
44 * @author Marius Gavrilescu <marius@ieval.ro>
46 public final class PollServerAsyncTask
extends AsyncTask
<Void
, Void
, List
<PollServerAsyncTask
.Command
>> {
48 * 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
50 * @author Marius Gavrilescu <marius@ieval.ro>
56 final String command
;//NOPMD no confusion here
58 * The list of command arguments
62 * The reply address, excluding the protocol
67 * Construct a Command from its three parts
69 * @param command the command name
70 * @param args the command arguments
71 * @param replyto the reply address
73 Command(final String command
, final String
[] args
, final String replyto
) {//NOPMD array is immutable
80 /** Context instance */
81 private final Context context
;
84 * Constructs a PollServerAsyncTask.
86 * @param context Context instance
88 public PollServerAsyncTask(final Context context
) {
93 protected List
<Command
> doInBackground(final @Nullable Void
... params
) {
94 Log
.d(getClass().getName(), "Polling server");
95 final List
<Command
> commands
=new ArrayList
<Command
>(10);
97 final URL url
=Utils
.getServerURL(toNonNull(context
),"/get");
98 final HttpURLConnection conn
=(HttpURLConnection
) url
.openConnection();
99 conn
.setRequestProperty("X-ID", FonBotApplication
.instance
.regID
);
101 final byte[] buf
=new byte[4096*1024];
102 Log
.d(getClass().getName(), "Server poll got response code "+conn
.getResponseCode()+" and message "+conn
.getResponseMessage());
103 if(conn
.getResponseCode()!=200)
105 conn
.getInputStream().read(buf
);
106 final JSONArray array
=new JSONArray(new String(buf
));
107 final List
<String
> list
=new ArrayList
<String
>();
108 for(int i
=0;i
<array
.length();i
++){
109 final JSONObject object
=array
.getJSONObject(i
);
111 for(int j
=0;object
.has("arg"+j
);j
++)
112 list
.add(object
.getString("arg"+j
));
114 commands
.add(new Command(//NOPMD command changes for each JSON object
115 toNonNull(object
.getString("command")),
116 toNonNull(list
.toArray(new String
[list
.size()])),
117 toNonNull(object
.getString("replyto"))));
120 } catch (MalformedURLException e
) {
122 } catch (IOException e
) {
124 } catch (JSONException e
) {
128 throw new AssertionError("commands is null in PollServerAsyncTask#doInBackground");//silence Eclipse bug
133 protected void onPostExecute(final @Nullable List
<Command
> commands
) {
136 for (Command command
: commands
) {
137 Log
.d(getClass().getName(), "Poll got command "+command
.command
+" with "+((command
.args
.length
==0)?
"no args":"args "+Utils
.join(
138 " ",toNonNull(command
.args
))));
139 Utils
.processCommand(
140 toNonNull(FonBotApplication
.instance
),
141 toNonNull(command
.command
),
142 toNonNull(command
.args
),
143 new Address(toNonNull(Protocol
.HTTP
), command
.replyto
));//NOPMD address depends on command
This page took 0.02292 seconds and 3 git commands to generate.