import org.json.JSONObject;
import ro.ieval.fonbot.Address.Protocol;
+import android.content.Context;
import android.os.AsyncTask;
+import android.preference.PreferenceManager;
+import android.util.Base64;
import android.util.Log;
+import com.google.android.gcm.GCMRegistrar;
+
/*
* Copyright © 2013 Marius Gavrilescu
*
}
}
+ /** Context instance */
+ private final Context context;
+
+ /**
+ * Constructs a PollServerAsyncTask.
+ *
+ * @param context Context instance
+ */
+ public PollServerAsyncTask(final Context context) {
+ this.context=context;
+ }
+
@Override
protected List<Command> doInBackground(final @Nullable Void... params) {
Log.d(getClass().getName(), "Polling server");
final List<Command> commands=new ArrayList<Command>(10);
try {
- final URL url=new URL("http://ieval.ro:7777/get");
+ final URL url=Utils.getServerURL(toNonNull(context),"/get");
final HttpURLConnection conn=(HttpURLConnection) url.openConnection();
- conn.setRequestProperty("X-ID", FonBotApplication.instance.regID);
+ conn.setRequestProperty("X-ID", GCMRegistrar.getRegistrationId(context));
+ final String user=PreferenceManager.getDefaultSharedPreferences(context).getString("username", null);
+ final String password=PreferenceManager.getDefaultSharedPreferences(context).getString("password", null);
+ if(user == null || password == null)
+ return commands;
+
+ conn.setRequestProperty("Authorization", "Basic "+Base64.encodeToString(
+ (user+':'+password).getBytes(), Base64.NO_WRAP));
conn.connect();
- final byte[] buf=new byte[4096*1024];
Log.d(getClass().getName(), "Server poll got response code "+conn.getResponseCode()+" and message "+conn.getResponseMessage());
if(conn.getResponseCode()!=200)
return commands;
- conn.getInputStream().read(buf);
- final JSONArray array=new JSONArray(new String(buf));
- final List<String> list=new ArrayList<String>();
+
+ final JSONArray array;
+ {
+ final byte[] buf=new byte[4096*1024];
+ conn.getInputStream().read(buf);
+ array=new JSONArray(new String(buf));
+ }
+
for(int i=0;i<array.length();i++){
final JSONObject object=array.getJSONObject(i);
- for(int j=0;object.has("arg"+j);j++)
- list.add(object.getString("arg"+j));
+ final JSONArray jsonargs=object.getJSONArray("args");
+ final String[] args=new String[jsonargs.length()];
+ for(int j=0;j<args.length;j++)
+ args[j]=jsonargs.getString(j);
commands.add(new Command(//NOPMD command changes for each JSON object
toNonNull(object.getString("command")),
- toNonNull(list.toArray(new String[list.size()])),
+ args,
toNonNull(object.getString("replyto"))));
- list.clear();
}
} catch (MalformedURLException e) {
e.printStackTrace();
Log.d(getClass().getName(), "Poll got command "+command.command+" with "+((command.args.length==0)?"no args":"args "+Utils.join(
" ",toNonNull(command.args))));
Utils.processCommand(
- toNonNull(FonBotApplication.instance),
+ toNonNull(context),
toNonNull(command.command),
toNonNull(command.args),
new Address(toNonNull(Protocol.HTTP), command.replyto));//NOPMD address depends on command