-/*\r
- * //******************************************************************\r
- * //\r
- * // Copyright 2015 Intel Corporation.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- * //\r
- * // Licensed under the Apache License, Version 2.0 (the "License");\r
- * // you may not use this file except in compliance with the License.\r
- * // You may obtain a copy of the License at\r
- * //\r
- * // http://www.apache.org/licenses/LICENSE-2.0\r
- * //\r
- * // Unless required by applicable law or agreed to in writing, software\r
- * // distributed under the License is distributed on an "AS IS" BASIS,\r
- * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * // See the License for the specific language governing permissions and\r
- * // limitations under the License.\r
- * //\r
- * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
- */\r
-\r
-package org.iotivity.base.examples.simpleclient;\r
-\r
-import android.app.Activity;\r
-import android.content.BroadcastReceiver;\r
-import android.content.Context;\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.os.Message;\r
-import android.text.method.ScrollingMovementMethod;\r
-import android.util.Log;\r
-import android.widget.LinearLayout;\r
-import android.widget.TextView;\r
-\r
-import org.iotivity.base.ErrorCode;\r
-import org.iotivity.base.ModeType;\r
-import org.iotivity.base.ObserveType;\r
-import org.iotivity.base.OcConnectivityType;\r
-import org.iotivity.base.OcException;\r
-import org.iotivity.base.OcHeaderOption;\r
-import org.iotivity.base.OcPlatform;\r
-import org.iotivity.base.OcRepresentation;\r
-import org.iotivity.base.OcResource;\r
-import org.iotivity.base.PlatformConfig;\r
-import org.iotivity.base.QualityOfService;\r
-import org.iotivity.base.ServiceType;\r
-\r
-import java.util.HashMap;\r
-import java.util.List;\r
-\r
-import base.iotivity.org.examples.message.IMessageLogger;\r
-\r
-/**\r
- * SimpleClient\r
- * <p/>\r
- * SimpleClient is a sample client app which should be started after the simpleServer is started.\r
- * It finds resources advertised by the server and calls different operations on it (GET, PUT,\r
- * POST and OBSERVE).\r
- * This implements IMessageLogger to display messages on the screen\r
- */\r
-public class SimpleClient extends Activity implements OcPlatform.OnResourceFoundListener,\r
- IMessageLogger {\r
- private static final String TAG = "SimpleClient: ";\r
-\r
- private Light myLight;\r
- private OcResource curResource;\r
-\r
- //for display\r
- private TextView mEventsTextView;\r
- private static boolean printOnce = true;\r
-\r
- /**\r
- * configure OIC platform and call findResource\r
- */\r
- private void initOICStack() {\r
- //create platform config\r
- PlatformConfig cfg = new PlatformConfig(\r
- this,\r
- ServiceType.IN_PROC,\r
- ModeType.CLIENT,\r
- "0.0.0.0", // bind to all available interfaces\r
- 0,\r
- QualityOfService.LOW);\r
- OcPlatform.Configure(cfg);\r
- try {\r
- /**\r
- * find all resources\r
- */\r
- OcPlatform.findResource("", OcPlatform.WELL_KNOWN_QUERY + "?rt=" + "core.light",\r
- OcConnectivityType.WIFI, this);\r
- } catch (OcException e) {\r
- logMessage(TAG + "findResource error: " + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- @Override\r
- /**\r
- * callback when a resource is found. This method calls doGetLightRepresentation to get the\r
- * current values of myLight\r
- */\r
- synchronized public void onResourceFound(OcResource ocResource) {\r
- /**\r
- * this may potentially be called by multiple threads at the same time\r
- */\r
- synchronized (this) {\r
- String resourceUri;\r
- String hostAddress;\r
- resourceUri = ocResource.getUri();\r
- hostAddress = ocResource.getHost();\r
- logMessage(TAG + "Discovered Resource\nUri: " + resourceUri + " \n Host: " + hostAddress);\r
- // get the resource types\r
- if (resourceUri.equals(StringConstants.RESOURCE_URI0)) {\r
- curResource = ocResource;\r
- doGetLightRepresentation();\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * get myLight values after observe\r
- */\r
- private void doObserveLightRepresentation() {\r
- // eventhandler for observe()\r
- OcResource.OnObserveListener onObserveListener = new OcResource.OnObserveListener() {\r
- @Override\r
- public void onObserveCompleted(List<OcHeaderOption> ocHeaderOptions,\r
- OcRepresentation ocRepresentation, int seqNum) {\r
- if (printOnce) {\r
- logMessage(TAG + "OBSERVE request was successful");\r
- printOnce = false;\r
- }\r
- try {\r
- boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
- int power = ocRepresentation.getValue(StringConstants.POWER);\r
- String name = ocRepresentation.getValue(StringConstants.NAME);\r
- myLight.setState(state);\r
- myLight.setPower(power);\r
- myLight.setName(name);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- logMessage(TAG + "onObserve: Power: " + myLight.getPower());\r
- if (seqNum > 20) {\r
- try {\r
- curResource.cancelObserve();\r
- logMessage(TAG + "Successfully cancelled observe");\r
- } catch (OcException e) {\r
- logMessage(TAG + "cancelObserve error. " + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- }\r
-\r
- @Override\r
- public void onObserveFailed(Throwable throwable) {\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- //do something based on errorCode\r
- }\r
- Log.e(TAG, throwable.toString());\r
- }\r
- };\r
- try {\r
- curResource.observe(ObserveType.OBSERVE, new HashMap<String, String>(), onObserveListener);\r
- } catch (OcException e) {\r
- logMessage(TAG + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- * get the current value of myLight after POST and call doObserveLightRepresentation\r
- *\r
- * @param ocRepresentation needed to invoke post()\r
- */\r
- private void doOnPost2(OcRepresentation ocRepresentation) {\r
- // eventhandler for post()\r
- OcResource.OnPostListener onPostListener2 = new OcResource.OnPostListener() {\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation rep) {\r
- logMessage(TAG + "POST request was successful");\r
- String createdUri = rep.getUri();\r
- if (createdUri.equals(StringConstants.RESOURCE_URI1)) {\r
- logMessage(TAG + "Uri of the created resource: " + createdUri);\r
- } else {\r
- try {\r
- boolean state = rep.getValue(StringConstants.STATE);\r
- int power = rep.getValue(StringConstants.POWER);\r
- String name = rep.getValue(StringConstants.NAME);\r
- myLight.setState(state);\r
- myLight.setPower(power);\r
- myLight.setName(name);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- logMessage(TAG + "onPost\nState: " + myLight.getState() + "\nPower: " +\r
- myLight.getPower() + "\nName: " + myLight.getName());\r
- }\r
- doObserveLightRepresentation();\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- //do something based on errorCode\r
- }\r
- Log.e(TAG, throwable.toString());\r
- }\r
- };\r
- try {\r
- curResource.post(ocRepresentation, new HashMap<String, String>(), onPostListener2);\r
- } catch (OcException e) {\r
- logMessage(TAG + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- * create a new resource and update its value.\r
- */\r
- private void doPostLightRepresentation() {\r
- // eventhandler for post()\r
- OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {\r
- @Override\r
- public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions,\r
- OcRepresentation ocRepresentation) {\r
- String createdUri = "";\r
- try {\r
- createdUri = ocRepresentation.getValue(StringConstants.CREATED_URI);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- if (createdUri.equals(StringConstants.RESOURCE_URI1)) {\r
- logMessage(TAG + "Uri of the created resource: " + createdUri);\r
- } else {\r
- boolean state = false;\r
- try {\r
- state = ocRepresentation.getValue(StringConstants.STATE);\r
- int power = ocRepresentation.getValue(StringConstants.POWER);\r
- String name = ocRepresentation.getValue(StringConstants.NAME);\r
- myLight.setState(state);\r
- myLight.setPower(power);\r
- myLight.setName(name);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
- OcRepresentation rep = new OcRepresentation();\r
- myLight.setState(true);\r
- myLight.setPower(55);\r
- try {\r
- rep.setValue(StringConstants.POWER, myLight.getPower());\r
- rep.setValue(StringConstants.STATE, myLight.getState());\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- doOnPost2(rep);\r
- }\r
-\r
- @Override\r
- public void onPostFailed(Throwable throwable) {\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- //do something based on errorCode\r
- }\r
- Log.e(TAG, throwable.toString());\r
- }\r
- };\r
-\r
- OcRepresentation rep = new OcRepresentation();\r
- myLight.setState(false);\r
- myLight.setPower(105);\r
- try {\r
- rep.setValue(StringConstants.STATE, myLight.getState());\r
- rep.setValue(StringConstants.POWER, myLight.getPower());\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- try {\r
- curResource.post(rep, new HashMap<String, String>(), onPostListener);\r
- } catch (OcException e) {\r
- logMessage(TAG + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- * modify the current value of myLight and call doPostLightRepresentation\r
- */\r
- private void doPutLightRepresentation() {\r
- // eventhandler for put()\r
- OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {\r
- @Override\r
- public void onPutCompleted(List<OcHeaderOption> ocHeaderOptions,\r
- OcRepresentation ocRepresentation) {\r
- logMessage(TAG + "PUT resource was successful");\r
- try {\r
- boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
- int power = ocRepresentation.getValue(StringConstants.POWER);\r
- String name = ocRepresentation.getValue(StringConstants.NAME);\r
- myLight.setState(state);\r
- myLight.setPower(power);\r
- myLight.setName(name);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
-\r
- logMessage(TAG + "onPutCompleted:\nState:" + myLight.getState() + "\nPower: " +\r
- myLight.getPower() + "\nName: " + myLight.getName());\r
- doPostLightRepresentation();\r
- }\r
-\r
- @Override\r
- public void onPutFailed(Throwable throwable) {\r
-\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- //do something based on errorCode\r
- }\r
- Log.e(TAG, throwable.toString());\r
- }\r
- };\r
-\r
- OcRepresentation rep = new OcRepresentation();\r
- Log.d(TAG, "myLight settings: power = 15");\r
- myLight.setState(true);\r
- myLight.setPower(15);\r
- try {\r
- rep.setValue(StringConstants.STATE, myLight.getState());\r
- rep.setValue(StringConstants.POWER, myLight.getPower());\r
- rep.setValue(StringConstants.NAME, myLight.getName());\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- try {\r
- Log.d(TAG, "before calling put");\r
- curResource.put(rep, new HashMap<String, String>(), onPutListener);\r
- } catch (OcException e) {\r
- logMessage(TAG + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- Log.d(TAG, "end of put call");\r
- }\r
-\r
- /**\r
- * get the existing value of myLight and call doPutLightRepresentation() to modify the current values\r
- */\r
- private void doGetLightRepresentation() {\r
- // eventhandler for get()\r
- OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {\r
- @Override\r
- public void onGetCompleted(List<OcHeaderOption> headerOptionList,\r
- OcRepresentation ocRepresentation) {\r
- logMessage(TAG + "GET resource was successful " + StringConstants.STATE);\r
- try {\r
- boolean state = ocRepresentation.getValue(StringConstants.STATE);\r
- int power = ocRepresentation.getValue(StringConstants.POWER);\r
- String name = ocRepresentation.getValue(StringConstants.NAME);\r
- myLight.setState(state);\r
- myLight.setPower(power);\r
- myLight.setName(name);\r
- } catch (OcException e) {\r
- Log.e(TAG, e.getMessage());\r
- }\r
- logMessage(TAG + "onGetCompleted\nState: " + myLight.getState() + "\nPower: " +\r
- myLight.getPower() + "\nName: " + myLight.getName());\r
- doPutLightRepresentation();\r
- }\r
-\r
- @Override\r
- public void onGetFailed(Throwable throwable) {\r
- if (throwable instanceof OcException) {\r
- OcException ocEx = (OcException) throwable;\r
- ErrorCode errCode = ocEx.getErrorCode();\r
- //do something based on errorCode\r
- }\r
- Log.e(TAG, throwable.toString());\r
- }\r
- };\r
-\r
- try {\r
- curResource.get(new HashMap<String, String>(), onGetListener);\r
- } catch (OcException e) {\r
- logMessage(TAG + e.getMessage());\r
- Log.e(TAG, e.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- * to display on SimpleClient screen\r
- */\r
- public class MessageReceiver extends BroadcastReceiver {\r
- @Override\r
- public void onReceive(Context context, Intent intent) {\r
- final String message = intent.getStringExtra(StringConstants.MESSAGE);\r
- logMessage(message);\r
- }\r
- }\r
-\r
- @Override\r
- protected void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
- setContentView(R.layout.activity_main);\r
- mEventsTextView = new TextView(this);\r
- mEventsTextView.setMovementMethod(new ScrollingMovementMethod());\r
- LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);\r
- layout.addView(mEventsTextView, new LinearLayout.LayoutParams(\r
- LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)\r
- );\r
- myLight = new Light();\r
-\r
- initOICStack();\r
- }\r
-\r
- @Override\r
- public void logMessage(String text) {\r
- logMsg(text);\r
- }\r
-\r
- public void logMsg(final String text) {\r
- runOnUiThread(new Runnable() {\r
- public void run() {\r
- Message msg = new Message();\r
- msg.obj = text;\r
- mEventsTextView.append("\n");\r
- mEventsTextView.append(text);\r
- }\r
- });\r
- Log.i(TAG, text);\r
- //to print on SimpleServer screen\r
- Intent intent = new Intent("org.iotivity.base.examples.simpleclient");\r
- intent.putExtra(StringConstants.MESSAGE, text);\r
- sendBroadcast(intent);\r
- }\r
-}\r
+/*
+ * //******************************************************************
+ * //
+ * // Copyright 2015 Intel Corporation.
+ * //
+ * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ * //
+ * // Licensed under the Apache License, Version 2.0 (the "License");
+ * // you may not use this file except in compliance with the License.
+ * // You may obtain a copy of the License at
+ * //
+ * // http://www.apache.org/licenses/LICENSE-2.0
+ * //
+ * // Unless required by applicable law or agreed to in writing, software
+ * // distributed under the License is distributed on an "AS IS" BASIS,
+ * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * // See the License for the specific language governing permissions and
+ * // limitations under the License.
+ * //
+ * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+ */
+
+package org.iotivity.base.examples.simpleclient;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.AssetManager;
+import android.os.Bundle;
+import android.os.Message;
+import android.preference.PreferenceManager;
+import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.iotivity.base.ErrorCode;
+import org.iotivity.base.ModeType;
+import org.iotivity.base.ObserveType;
+import org.iotivity.base.OcConnectivityType;
+import org.iotivity.base.OcException;
+import org.iotivity.base.OcHeaderOption;
+import org.iotivity.base.OcPlatform;
+import org.iotivity.base.OcRepresentation;
+import org.iotivity.base.OcResource;
+import org.iotivity.base.PlatformConfig;
+import org.iotivity.base.QualityOfService;
+import org.iotivity.base.ServiceType;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+
+import base.iotivity.org.examples.message.IMessageLogger;
+
+/**
+ * SimpleClient
+ * <p/>
+ * SimpleClient is a sample client app which should be started after the simpleServer is started.
+ * It finds resources advertised by the server and calls different operations on it (GET, PUT,
+ * POST and OBSERVE).
+ * This implements IMessageLogger to display messages on the screen
+ */
+public class SimpleClient extends Activity implements OcPlatform.OnResourceFoundListener,
+ IMessageLogger {
+ private static final String TAG = "SimpleClient: ";
+
+ private static final int BUFFER_SIZE = 1024;
+ private String filePath = "";
+ private Light myLight;
+ private OcResource curResource;
+
+ //for display
+ private TextView mEventsTextView;
+ private static boolean printOnce = true;
+
+ /**
+ * configure OIC platform and call findResource
+ */
+ private void initOICStack() {
+ //create platform config
+ PlatformConfig cfg = new PlatformConfig(
+ this,
+ ServiceType.IN_PROC,
+ ModeType.CLIENT_SERVER,
+ "0.0.0.0", // bind to all available interfaces
+ 0,
+ QualityOfService.LOW, filePath + StringConstants.OIC_CLIENT_JSON_DB_FILE);
+ OcPlatform.Configure(cfg);
+ try {
+ /**
+ * find all resources
+ */
+ OcPlatform.findResource("", OcPlatform.WELL_KNOWN_QUERY + "?rt=" + "core.light",
+ EnumSet.of(OcConnectivityType.CT_DEFAULT), this);
+ } catch (OcException e) {
+ logMessage(TAG + "findResource error: " + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ @Override
+ /**
+ * callback when a resource is found. This method calls doGetLightRepresentation to get the
+ * current values of myLight
+ */
+ synchronized public void onResourceFound(OcResource ocResource) {
+ /**
+ * this may potentially be called by multiple threads at the same time
+ */
+ synchronized (this) {
+ String resourceUri;
+ String hostAddress;
+ resourceUri = ocResource.getUri();
+ hostAddress = ocResource.getHost();
+ logMessage(TAG + "Discovered Resource\nUri: " + resourceUri + " \n Host: " + hostAddress);
+ // get the resource types
+ if (resourceUri.contains("light")) {
+ curResource = ocResource;
+ doGetLightRepresentation();
+ }
+ }
+ }
+
+ /**
+ * get myLight values after observe
+ */
+ private void doObserveLightRepresentation() {
+ // eventhandler for observe()
+ OcResource.OnObserveListener onObserveListener = new OcResource.OnObserveListener() {
+ @Override
+ public void onObserveCompleted(List<OcHeaderOption> ocHeaderOptions,
+ OcRepresentation ocRepresentation, int seqNum) {
+ if (printOnce) {
+ logMessage(TAG + "OBSERVE request was successful");
+ printOnce = false;
+ }
+ try {
+ boolean state = ocRepresentation.getValue(StringConstants.STATE);
+ int power = ocRepresentation.getValue(StringConstants.POWER);
+ String name = ocRepresentation.getValue(StringConstants.NAME);
+ myLight.setState(state);
+ myLight.setPower(power);
+ myLight.setName(name);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ logMessage(TAG + "onObserve: Power: " + myLight.getPower());
+ if (seqNum > 20) {
+ try {
+ curResource.cancelObserve();
+ logMessage(TAG + "Successfully cancelled observe");
+ } catch (OcException e) {
+ logMessage(TAG + "cancelObserve error. " + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ }
+
+ @Override
+ public void onObserveFailed(Throwable throwable) {
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ ErrorCode errCode = ocEx.getErrorCode();
+ //do something based on errorCode
+ }
+ Log.e(TAG, throwable.toString());
+ }
+ };
+ try {
+ curResource.observe(ObserveType.OBSERVE, new HashMap<String, String>(), onObserveListener);
+ } catch (OcException e) {
+ logMessage(TAG + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ /**
+ * get the current value of myLight after POST and call doObserveLightRepresentation
+ *
+ * @param ocRepresentation needed to invoke post()
+ */
+ private void doOnPost2(OcRepresentation ocRepresentation) {
+ // eventhandler for post()
+ OcResource.OnPostListener onPostListener2 = new OcResource.OnPostListener() {
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions, OcRepresentation rep) {
+ logMessage(TAG + "POST request was successful");
+ String createdUri = rep.getUri();
+ if (createdUri.equals(StringConstants.RESOURCE_URI1)) {
+ logMessage(TAG + "Uri of the created resource: " + createdUri);
+ } else {
+ try {
+ boolean state = rep.getValue(StringConstants.STATE);
+ int power = rep.getValue(StringConstants.POWER);
+ String name = rep.getValue(StringConstants.NAME);
+ myLight.setState(state);
+ myLight.setPower(power);
+ myLight.setName(name);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ logMessage(TAG + "onPost\nState: " + myLight.getState() + "\nPower: " +
+ myLight.getPower() + "\nName: " + myLight.getName());
+ }
+ doObserveLightRepresentation();
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ ErrorCode errCode = ocEx.getErrorCode();
+ //do something based on errorCode
+ }
+ Log.e(TAG, throwable.toString());
+ }
+ };
+ try {
+ curResource.post(ocRepresentation, new HashMap<String, String>(), onPostListener2);
+ } catch (OcException e) {
+ logMessage(TAG + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ /**
+ * create a new resource and update its value.
+ */
+ private void doPostLightRepresentation() {
+ // eventhandler for post()
+ OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {
+ @Override
+ public void onPostCompleted(List<OcHeaderOption> ocHeaderOptions,
+ OcRepresentation ocRepresentation) {
+ String createdUri = "";
+ try {
+ createdUri = ocRepresentation.getValue(StringConstants.CREATED_URI);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ if (createdUri.equals(StringConstants.RESOURCE_URI1)) {
+ logMessage(TAG + "Uri of the created resource: " + createdUri);
+ } else {
+ boolean state = false;
+ try {
+ state = ocRepresentation.getValue(StringConstants.STATE);
+ int power = ocRepresentation.getValue(StringConstants.POWER);
+ String name = ocRepresentation.getValue(StringConstants.NAME);
+ myLight.setState(state);
+ myLight.setPower(power);
+ myLight.setName(name);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ OcRepresentation rep = new OcRepresentation();
+ myLight.setState(true);
+ myLight.setPower(55);
+ try {
+ rep.setValue(StringConstants.POWER, myLight.getPower());
+ rep.setValue(StringConstants.STATE, myLight.getState());
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ doOnPost2(rep);
+ }
+
+ @Override
+ public void onPostFailed(Throwable throwable) {
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ ErrorCode errCode = ocEx.getErrorCode();
+ //do something based on errorCode
+ }
+ Log.e(TAG, throwable.toString());
+ }
+ };
+
+ OcRepresentation rep = new OcRepresentation();
+ myLight.setState(false);
+ myLight.setPower(105);
+ try {
+ rep.setValue(StringConstants.STATE, myLight.getState());
+ rep.setValue(StringConstants.POWER, myLight.getPower());
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ try {
+ curResource.post(rep, new HashMap<String, String>(), onPostListener);
+ } catch (OcException e) {
+ logMessage(TAG + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ /**
+ * modify the current value of myLight and call doPostLightRepresentation
+ */
+ private void doPutLightRepresentation() {
+ // eventhandler for put()
+ OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {
+ @Override
+ public void onPutCompleted(List<OcHeaderOption> ocHeaderOptions,
+ OcRepresentation ocRepresentation) {
+ logMessage(TAG + "PUT resource was successful");
+ try {
+ boolean state = ocRepresentation.getValue(StringConstants.STATE);
+ int power = ocRepresentation.getValue(StringConstants.POWER);
+ String name = ocRepresentation.getValue(StringConstants.NAME);
+ myLight.setState(state);
+ myLight.setPower(power);
+ myLight.setName(name);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+
+ logMessage(TAG + "onPutCompleted:\nState:" + myLight.getState() + "\nPower: " +
+ myLight.getPower() + "\nName: " + myLight.getName());
+ doPostLightRepresentation();
+ }
+
+ @Override
+ public void onPutFailed(Throwable throwable) {
+
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ ErrorCode errCode = ocEx.getErrorCode();
+ //do something based on errorCode
+ }
+ Log.e(TAG, throwable.toString());
+ }
+ };
+
+ OcRepresentation rep = new OcRepresentation();
+ Log.d(TAG, "myLight settings: power = 15");
+ myLight.setState(true);
+ myLight.setPower(15);
+ try {
+ rep.setValue(StringConstants.STATE, myLight.getState());
+ rep.setValue(StringConstants.POWER, myLight.getPower());
+ rep.setValue(StringConstants.NAME, myLight.getName());
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ try {
+ Log.d(TAG, "before calling put");
+ curResource.put(rep, new HashMap<String, String>(), onPutListener);
+ } catch (OcException e) {
+ logMessage(TAG + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ Log.d(TAG, "end of put call");
+ }
+
+ /**
+ * get the existing value of myLight and call doPutLightRepresentation() to modify the current values
+ */
+ private void doGetLightRepresentation() {
+ // eventhandler for get()
+ OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {
+ @Override
+ public void onGetCompleted(List<OcHeaderOption> headerOptionList,
+ OcRepresentation ocRepresentation) {
+ logMessage(TAG + "GET resource was successful " + StringConstants.STATE);
+ try {
+ boolean state = ocRepresentation.getValue(StringConstants.STATE);
+ int power = ocRepresentation.getValue(StringConstants.POWER);
+ String name = ocRepresentation.getValue(StringConstants.NAME);
+ myLight.setState(state);
+ myLight.setPower(power);
+ myLight.setName(name);
+ } catch (OcException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ logMessage(TAG + "onGetCompleted\nState: " + myLight.getState() + "\nPower: " +
+ myLight.getPower() + "\nName: " + myLight.getName());
+ doPutLightRepresentation();
+ }
+
+ @Override
+ public void onGetFailed(Throwable throwable) {
+ if (throwable instanceof OcException) {
+ OcException ocEx = (OcException) throwable;
+ ErrorCode errCode = ocEx.getErrorCode();
+ //do something based on errorCode
+ }
+ Log.e(TAG, throwable.toString());
+ }
+ };
+
+ try {
+ curResource.get(new HashMap<String, String>(), onGetListener);
+ } catch (OcException e) {
+ logMessage(TAG + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ }
+ }
+
+ /**
+ * to display on SimpleClient screen
+ */
+ public class MessageReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String message = intent.getStringExtra(StringConstants.MESSAGE);
+ logMessage(message);
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ mEventsTextView = new TextView(this);
+ mEventsTextView.setMovementMethod(new ScrollingMovementMethod());
+ LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
+ layout.addView(mEventsTextView, new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT, 0, 1f)
+ );
+ myLight = new Light();
+ filePath = getFilesDir().getPath() + "/"; // data/data/<package>/files/
+ //copy json when application runs first time
+ SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
+ boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
+ if (isFirstRun) {
+ copyJsonFromAsset();
+ SharedPreferences.Editor editor = wmbPreference.edit();
+ editor.putBoolean("FIRSTRUN", false);
+ editor.commit();
+ }
+
+
+ initOICStack();
+ }
+/**
+ * Copy svr db json file from assets folder to app data files dir
+ */
+ private void copyJsonFromAsset() {
+ AssetManager assetManager = getAssets();
+ InputStream in = null;
+ OutputStream out = null;
+ try {
+ in = assetManager.open(StringConstants.OIC_CLIENT_JSON_DB_FILE);
+ File file = new File(filePath);
+ //check files directory exists
+ if (!(file.exists() && file.isDirectory())) {
+ file.mkdirs();
+ }
+ out = new FileOutputStream(filePath + StringConstants.OIC_CLIENT_JSON_DB_FILE);
+ copyFile(in, out);
+ } catch (NullPointerException e) {
+ logMessage(TAG + "Null pointer exception " + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ } catch (FileNotFoundException e) {
+ logMessage(TAG + "Json svr db file not found " + e.getMessage());
+ Log.e(TAG, e.getMessage());
+ } catch (IOException e) {
+ logMessage(TAG + StringConstants.OIC_CLIENT_JSON_DB_FILE+ " file copy failed");
+ Log.e(TAG, e.getMessage());
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e) {
+ Log.e(TAG, e.getMessage());
+ }
+ }
+ }
+ }
+
+ private void copyFile(InputStream in, OutputStream out) throws IOException {
+ byte[] buffer = new byte[BUFFER_SIZE];
+ int read;
+ while ((read = in.read(buffer)) != -1) {
+ out.write(buffer, 0, read);
+ }
+ }
+ @Override
+ public void logMessage(String text) {
+ logMsg(text);
+ }
+
+ public void logMsg(final String text) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ Message msg = new Message();
+ msg.obj = text;
+ mEventsTextView.append("\n");
+ mEventsTextView.append(text);
+ }
+ });
+ Log.i(TAG, text);
+ //to print on SimpleServer screen
+ Intent intent = new Intent("org.iotivity.base.examples.simpleclient");
+ intent.putExtra(StringConstants.MESSAGE, text);
+ sendBroadcast(intent);
+ }
+}