summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/client/Piztor/.classpath9
-rw-r--r--misc/client/Piztor/.project33
-rw-r--r--misc/client/Piztor/.settings/org.eclipse.jdt.core.prefs4
-rw-r--r--misc/client/Piztor/AndroidManifest.xml36
-rw-r--r--misc/client/Piztor/bin/AndroidManifest.xml36
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/ActMgr.classbin0 -> 2616 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.classbin0 -> 328 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr$ActivityStatus.classbin0 -> 1412 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.classbin0 -> 2846 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.classbin0 -> 347 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.classbin0 -> 471 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.classbin0 -> 804 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.classbin0 -> 2205 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$attr.classbin0 -> 343 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$dimen.classbin0 -> 464 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$drawable.classbin0 -> 410 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$id.classbin0 -> 396 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$layout.classbin0 -> 406 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$menu.classbin0 -> 419 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$string.classbin0 -> 518 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R$style.classbin0 -> 434 bytes
-rw-r--r--misc/client/Piztor/bin/classes/com/macaroon/piztor/R.classbin0 -> 683 bytes
-rw-r--r--misc/client/Piztor/gen/com/macaroon/piztor/BuildConfig.java6
-rw-r--r--misc/client/Piztor/gen/com/macaroon/piztor/R.java70
-rw-r--r--misc/client/Piztor/ic_launcher-web.pngbin0 -> 51394 bytes
-rw-r--r--misc/client/Piztor/libs/android-support-v4.jarbin0 -> 556198 bytes
-rw-r--r--misc/client/Piztor/proguard-project.txt20
-rw-r--r--misc/client/Piztor/project.properties14
-rw-r--r--misc/client/Piztor/res/drawable-hdpi/ic_launcher.pngbin0 -> 7658 bytes
-rw-r--r--misc/client/Piztor/res/drawable-mdpi/ic_launcher.pngbin0 -> 3777 bytes
-rw-r--r--misc/client/Piztor/res/drawable-xhdpi/ic_launcher.pngbin0 -> 12516 bytes
-rw-r--r--misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 24777 bytes
-rw-r--r--misc/client/Piztor/res/layout/activity_init.xml16
-rw-r--r--misc/client/Piztor/res/menu/init.xml9
-rw-r--r--misc/client/Piztor/res/menu/main.xml9
-rw-r--r--misc/client/Piztor/res/values-sw600dp/dimens.xml8
-rw-r--r--misc/client/Piztor/res/values-sw720dp-land/dimens.xml9
-rw-r--r--misc/client/Piztor/res/values-v11/styles.xml11
-rw-r--r--misc/client/Piztor/res/values-v14/styles.xml12
-rw-r--r--misc/client/Piztor/res/values/dimens.xml7
-rw-r--r--misc/client/Piztor/res/values/strings.xml9
-rw-r--r--misc/client/Piztor/res/values/styles.xml20
-rw-r--r--misc/client/Piztor/src/com/macaroon/piztor/ActMgr.java63
-rw-r--r--misc/client/Piztor/src/com/macaroon/piztor/AppMgr.java62
-rw-r--r--misc/client/Piztor/src/com/macaroon/piztor/InitAct.java22
-rw-r--r--misc/client/Piztor/src/com/macaroon/piztor/PiztorAct.java60
-rw-r--r--misc/client/README.rst1
-rw-r--r--misc/client/Socket-demo/Login.java6
-rw-r--r--misc/client/Socket-demo/MainActivity.java44
-rw-r--r--misc/client/Socket-demo/Myrequest.java10
-rw-r--r--misc/client/Socket-demo/Myrespond.java12
-rw-r--r--misc/client/Socket-demo/SocketClient.java107
-rw-r--r--misc/client/Socket-demo/Transam.java125
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/.AndroidManifest.xml.swpbin0 -> 12288 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/.classpath9
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/.project33
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/.settings/org.eclipse.jdt.core.prefs4
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/AndroidManifest.xml26
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/AndroidGPSTracking.apkbin0 -> 16993 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/AndroidManifest.xml26
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes.dexbin0 -> 9188 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity$1.classbin0 -> 1809 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity.classbin0 -> 1119 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/BuildConfig.classbin0 -> 355 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$1.classbin0 -> 1206 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$2.classbin0 -> 879 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker.classbin0 -> 4488 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$attr.classbin0 -> 355 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$drawable.classbin0 -> 422 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$id.classbin0 -> 408 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$layout.classbin0 -> 409 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$string.classbin0 -> 442 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R.classbin0 -> 566 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jarbin0 -> 943 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/jarlist.cache3
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-hdpi/ic_launcher.pngbin0 -> 3966 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-ldpi/ic_launcher.pngbin0 -> 1537 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-mdpi/ic_launcher.pngbin0 -> 2200 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_bin0 -> 10818 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/default.properties2
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/BuildConfig.java6
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/R.java26
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/proguard.cfg40
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/project.properties11
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/drawable-hdpi/ic_launcher.pngbin0 -> 10224 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/drawable-ldpi/ic_launcher.pngbin0 -> 10224 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/drawable-mdpi/ic_launcher.pngbin0 -> 10224 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/drawable-xhdpi/ic_launcher.pngbin0 -> 10224 bytes
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/layout/main.xml14
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/res/values/strings.xml7
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java50
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java200
-rw-r--r--misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java33
-rw-r--r--misc/features18
-rw-r--r--misc/main_ui_logic.jpgbin0 -> 39703 bytes
-rw-r--r--misc/preview.jpgbin0 -> 305791 bytes
-rw-r--r--misc/schedule.rst21
-rw-r--r--misc/server/README.rst1
-rw-r--r--misc/server/client.py58
-rw-r--r--misc/server/piztor/exc.py17
-rw-r--r--misc/server/piztor/import.py45
-rw-r--r--misc/server/piztor/model.py80
-rw-r--r--misc/server/piztor_server.py234
-rw-r--r--misc/server/ptp.rst105
-rw-r--r--misc/server/rush.py14
105 files changed, 1933 insertions, 0 deletions
diff --git a/misc/client/Piztor/.classpath b/misc/client/Piztor/.classpath
new file mode 100644
index 0000000..7bc01d9
--- /dev/null
+++ b/misc/client/Piztor/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/misc/client/Piztor/.project b/misc/client/Piztor/.project
new file mode 100644
index 0000000..97100ec
--- /dev/null
+++ b/misc/client/Piztor/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>Piztor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/misc/client/Piztor/.settings/org.eclipse.jdt.core.prefs b/misc/client/Piztor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b080d2d
--- /dev/null
+++ b/misc/client/Piztor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/misc/client/Piztor/AndroidManifest.xml b/misc/client/Piztor/AndroidManifest.xml
new file mode 100644
index 0000000..63cb8ff
--- /dev/null
+++ b/misc/client/Piztor/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.macaroon.piztor"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="8"
+ android:targetSdkVersion="17" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name="com.macaroon.piztor.Main"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="com.macaroon.piztor.InitAct"
+ android:label="@string/title_activity_init" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
diff --git a/misc/client/Piztor/bin/AndroidManifest.xml b/misc/client/Piztor/bin/AndroidManifest.xml
new file mode 100644
index 0000000..63cb8ff
--- /dev/null
+++ b/misc/client/Piztor/bin/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.macaroon.piztor"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk
+ android:minSdkVersion="8"
+ android:targetSdkVersion="17" />
+
+ <application
+ android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/AppTheme" >
+ <activity
+ android:name="com.macaroon.piztor.Main"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="com.macaroon.piztor.InitAct"
+ android:label="@string/title_activity_init" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActMgr.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActMgr.class
new file mode 100644
index 0000000..1b1c693
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActMgr.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class
new file mode 100644
index 0000000..1f3df48
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr$ActivityStatus.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr$ActivityStatus.class
new file mode 100644
index 0000000..496344b
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr$ActivityStatus.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class
new file mode 100644
index 0000000..107bcad
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class
new file mode 100644
index 0000000..566eb01
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class
new file mode 100644
index 0000000..c656689
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class
new file mode 100644
index 0000000..6a8e04d
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class
new file mode 100644
index 0000000..4a3fc81
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$attr.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$attr.class
new file mode 100644
index 0000000..a95e1ab
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$attr.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$dimen.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$dimen.class
new file mode 100644
index 0000000..4bc657f
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$dimen.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$drawable.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$drawable.class
new file mode 100644
index 0000000..5444d98
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$drawable.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$id.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$id.class
new file mode 100644
index 0000000..8577179
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$id.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$layout.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$layout.class
new file mode 100644
index 0000000..fab7556
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$layout.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$menu.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$menu.class
new file mode 100644
index 0000000..cec6e5a
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$menu.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$string.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$string.class
new file mode 100644
index 0000000..a78c834
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$string.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$style.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$style.class
new file mode 100644
index 0000000..42ddcce
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$style.class
Binary files differ
diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class
new file mode 100644
index 0000000..d173856
--- /dev/null
+++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class
Binary files differ
diff --git a/misc/client/Piztor/gen/com/macaroon/piztor/BuildConfig.java b/misc/client/Piztor/gen/com/macaroon/piztor/BuildConfig.java
new file mode 100644
index 0000000..833e650
--- /dev/null
+++ b/misc/client/Piztor/gen/com/macaroon/piztor/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package com.macaroon.piztor;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+} \ No newline at end of file
diff --git a/misc/client/Piztor/gen/com/macaroon/piztor/R.java b/misc/client/Piztor/gen/com/macaroon/piztor/R.java
new file mode 100644
index 0000000..9821c7f
--- /dev/null
+++ b/misc/client/Piztor/gen/com/macaroon/piztor/R.java
@@ -0,0 +1,70 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package com.macaroon.piztor;
+
+public final class R {
+ public static final class attr {
+ }
+ public static final class dimen {
+ /** Default screen margins, per the Android Design guidelines.
+
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+
+ */
+ public static final int activity_horizontal_margin=0x7f040000;
+ public static final int activity_vertical_margin=0x7f040001;
+ }
+ public static final class drawable {
+ public static final int ic_launcher=0x7f020000;
+ }
+ public static final class id {
+ public static final int action_settings=0x7f080000;
+ }
+ public static final class layout {
+ public static final int activity_init=0x7f030000;
+ }
+ public static final class menu {
+ public static final int init=0x7f070000;
+ public static final int main=0x7f070001;
+ }
+ public static final class string {
+ public static final int action_settings=0x7f050001;
+ public static final int app_name=0x7f050000;
+ public static final int hello_world=0x7f050002;
+ public static final int title_activity_init=0x7f050003;
+ }
+ public static final class style {
+ /**
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+
+
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+
+
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+
+ API 11 theme customizations can go here.
+
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+
+ API 14 theme customizations can go here.
+ */
+ public static final int AppBaseTheme=0x7f060000;
+ /** Application theme.
+ All customizations that are NOT specific to a particular API-level can go here.
+ */
+ public static final int AppTheme=0x7f060001;
+ }
+}
diff --git a/misc/client/Piztor/ic_launcher-web.png b/misc/client/Piztor/ic_launcher-web.png
new file mode 100644
index 0000000..a18cbb4
--- /dev/null
+++ b/misc/client/Piztor/ic_launcher-web.png
Binary files differ
diff --git a/misc/client/Piztor/libs/android-support-v4.jar b/misc/client/Piztor/libs/android-support-v4.jar
new file mode 100644
index 0000000..cf12d28
--- /dev/null
+++ b/misc/client/Piztor/libs/android-support-v4.jar
Binary files differ
diff --git a/misc/client/Piztor/proguard-project.txt b/misc/client/Piztor/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/misc/client/Piztor/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/misc/client/Piztor/project.properties b/misc/client/Piztor/project.properties
new file mode 100644
index 0000000..ce39f2d
--- /dev/null
+++ b/misc/client/Piztor/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-18
diff --git a/misc/client/Piztor/res/drawable-hdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..288b665
--- /dev/null
+++ b/misc/client/Piztor/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..6ae570b
--- /dev/null
+++ b/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d4fb7cd
--- /dev/null
+++ b/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..85a6081
--- /dev/null
+++ b/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/Piztor/res/layout/activity_init.xml b/misc/client/Piztor/res/layout/activity_init.xml
new file mode 100644
index 0000000..43e6253
--- /dev/null
+++ b/misc/client/Piztor/res/layout/activity_init.xml
@@ -0,0 +1,16 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ tools:context=".InitAct" >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/hello_world" />
+
+</RelativeLayout>
diff --git a/misc/client/Piztor/res/menu/init.xml b/misc/client/Piztor/res/menu/init.xml
new file mode 100644
index 0000000..c002028
--- /dev/null
+++ b/misc/client/Piztor/res/menu/init.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_settings"/>
+
+</menu>
diff --git a/misc/client/Piztor/res/menu/main.xml b/misc/client/Piztor/res/menu/main.xml
new file mode 100644
index 0000000..c002028
--- /dev/null
+++ b/misc/client/Piztor/res/menu/main.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_settings"/>
+
+</menu>
diff --git a/misc/client/Piztor/res/values-sw600dp/dimens.xml b/misc/client/Piztor/res/values-sw600dp/dimens.xml
new file mode 100644
index 0000000..44f01db
--- /dev/null
+++ b/misc/client/Piztor/res/values-sw600dp/dimens.xml
@@ -0,0 +1,8 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw600dp devices (e.g. 7" tablets) here.
+ -->
+
+</resources>
diff --git a/misc/client/Piztor/res/values-sw720dp-land/dimens.xml b/misc/client/Piztor/res/values-sw720dp-land/dimens.xml
new file mode 100644
index 0000000..61e3fa8
--- /dev/null
+++ b/misc/client/Piztor/res/values-sw720dp-land/dimens.xml
@@ -0,0 +1,9 @@
+<resources>
+
+ <!--
+ Customize dimensions originally defined in res/values/dimens.xml (such as
+ screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
+ -->
+ <dimen name="activity_horizontal_margin">128dp</dimen>
+
+</resources>
diff --git a/misc/client/Piztor/res/values-v11/styles.xml b/misc/client/Piztor/res/values-v11/styles.xml
new file mode 100644
index 0000000..3c02242
--- /dev/null
+++ b/misc/client/Piztor/res/values-v11/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+
+ <!--
+ Base application theme for API 11+. This theme completely replaces
+ AppBaseTheme from res/values/styles.xml on API 11+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
+ <!-- API 11 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/misc/client/Piztor/res/values-v14/styles.xml b/misc/client/Piztor/res/values-v14/styles.xml
new file mode 100644
index 0000000..a91fd03
--- /dev/null
+++ b/misc/client/Piztor/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+<resources>
+
+ <!--
+ Base application theme for API 14+. This theme completely replaces
+ AppBaseTheme from BOTH res/values/styles.xml and
+ res/values-v11/styles.xml on API 14+ devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
+ <!-- API 14 theme customizations can go here. -->
+ </style>
+
+</resources>
diff --git a/misc/client/Piztor/res/values/dimens.xml b/misc/client/Piztor/res/values/dimens.xml
new file mode 100644
index 0000000..55c1e59
--- /dev/null
+++ b/misc/client/Piztor/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<resources>
+
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
diff --git a/misc/client/Piztor/res/values/strings.xml b/misc/client/Piztor/res/values/strings.xml
new file mode 100644
index 0000000..8e76dc0
--- /dev/null
+++ b/misc/client/Piztor/res/values/strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">Piztor</string>
+ <string name="action_settings">Settings</string>
+ <string name="hello_world">Hello world!</string>
+ <string name="title_activity_init">InitAct</string>
+
+</resources>
diff --git a/misc/client/Piztor/res/values/styles.xml b/misc/client/Piztor/res/values/styles.xml
new file mode 100644
index 0000000..6ce89c7
--- /dev/null
+++ b/misc/client/Piztor/res/values/styles.xml
@@ -0,0 +1,20 @@
+<resources>
+
+ <!--
+ Base application theme, dependent on API level. This theme is replaced
+ by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+ -->
+ <style name="AppBaseTheme" parent="android:Theme.Light">
+ <!--
+ Theme customizations available in newer API levels can go in
+ res/values-vXX/styles.xml, while customizations related to
+ backward-compatibility can go here.
+ -->
+ </style>
+
+ <!-- Application theme. -->
+ <style name="AppTheme" parent="AppBaseTheme">
+ <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+ </style>
+
+</resources>
diff --git a/misc/client/Piztor/src/com/macaroon/piztor/ActMgr.java b/misc/client/Piztor/src/com/macaroon/piztor/ActMgr.java
new file mode 100644
index 0000000..81fa6f2
--- /dev/null
+++ b/misc/client/Piztor/src/com/macaroon/piztor/ActMgr.java
@@ -0,0 +1,63 @@
+package com.macaroon.piztor;
+
+import java.util.*;
+
+import android.annotation.SuppressLint;
+
+@SuppressLint("UseSparseArrays")
+public class ActMgr {
+ // event
+ PiztorAct act;
+ ActStatus nowStatus;
+ HashMap<ActStatus, HashMap<Integer, ActStatus>> mp;
+
+ ActMgr(PiztorAct act, ActStatus nowStatus, ActStatus[] r) {
+ this.act = act;
+ this.nowStatus = nowStatus;
+ mp = new HashMap<ActStatus, HashMap<Integer, ActStatus>>();
+ for (int i = 0; i < r.length; i++) {
+ mp.put(r[i], new HashMap<Integer, ActStatus>());
+ }
+ }
+
+ void trigger(int event) {
+ for (Integer i : mp.get(nowStatus).keySet())
+ System.out.println(i);
+ if (mp.get(nowStatus).containsKey(event)) {
+ nowStatus.leave(event);
+ nowStatus = mp.get(nowStatus).get(event);
+ nowStatus.enter(event);
+ } else if (AppMgr.mp.get(act.getClass()).containsKey(event)) {
+ AppMgr.trigger(event);
+ }
+ }
+
+ void add(ActStatus a, int event, ActStatus b) {
+ if (mp.containsKey(a)) {
+ HashMap<Integer, ActStatus> h = mp.get(a);
+ h.put(event, b);
+ mp.put(a, h);
+ } else {
+ HashMap<Integer, ActStatus> h = new HashMap<Integer, ActStatus>();
+ h.put(event, b);
+ mp.put(a, h);
+ }
+ }
+}
+
+abstract class ActStatus {
+ abstract void enter(int e);
+
+ abstract void leave(int e);
+}
+
+class EmptyStatus extends ActStatus {
+ @Override
+ void enter(int e) {
+ }
+
+ @Override
+ void leave(int e) {
+ }
+
+}
diff --git a/misc/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/misc/client/Piztor/src/com/macaroon/piztor/AppMgr.java
new file mode 100644
index 0000000..9259786
--- /dev/null
+++ b/misc/client/Piztor/src/com/macaroon/piztor/AppMgr.java
@@ -0,0 +1,62 @@
+package com.macaroon.piztor;
+
+import java.util.HashMap;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+
+@SuppressLint("UseSparseArrays")
+public class AppMgr {
+ // Status
+ public enum ActivityStatus{
+ create, start, resume, restart, stop, pause, destroy
+ }
+ static ActivityStatus status;
+ static PiztorAct nowAct;
+
+ static HashMap<Class<?>, HashMap<Integer, Class<?>>> mp;
+
+ static void setStatus(ActivityStatus st) {
+ status = st;
+ }
+
+ static void trigger(int event) {
+
+ Intent i = new Intent();
+ i.setClass(nowAct, mp.get(nowAct.getClass()).get(event));
+ nowAct.startActivity(i);
+ }
+
+ static void add(Class<?> a, Integer event, Class<?> b) {
+ if (mp.containsKey(a))
+ mp.get(a).put(event, b);
+ else {
+ HashMap<Integer, Class<?>> h = new HashMap<Integer, Class<?>>();
+ h.put(event, b);
+ mp.put(a, h);
+ }
+ }
+
+ static void addTransition(Class<?> a, int i, Class<?> b) {
+ if (mp.containsKey(a)) {
+ HashMap<Integer, Class<?>> h = mp.get(a);
+ h.put(i, b);
+ mp.put(a, h);
+ } else {
+ HashMap<Integer, Class<?>> h = new HashMap<Integer, Class<?>>();
+ h.put(i, b);
+ mp.put(a, h);
+ }
+ }
+
+ static void addStatus(Class<?> a) {
+ mp.put(a, new HashMap<Integer, Class<?>>());
+ }
+
+ static void init() {
+ mp = new HashMap<Class<?>, HashMap<Integer, Class<?>>>();
+ addStatus(InitAct.class);
+
+ }
+
+}
diff --git a/misc/client/Piztor/src/com/macaroon/piztor/InitAct.java b/misc/client/Piztor/src/com/macaroon/piztor/InitAct.java
new file mode 100644
index 0000000..1ce492c
--- /dev/null
+++ b/misc/client/Piztor/src/com/macaroon/piztor/InitAct.java
@@ -0,0 +1,22 @@
+package com.macaroon.piztor;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.view.Menu;
+
+public class InitAct extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_init);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.init, menu);
+ return true;
+ }
+
+}
diff --git a/misc/client/Piztor/src/com/macaroon/piztor/PiztorAct.java b/misc/client/Piztor/src/com/macaroon/piztor/PiztorAct.java
new file mode 100644
index 0000000..ad12b17
--- /dev/null
+++ b/misc/client/Piztor/src/com/macaroon/piztor/PiztorAct.java
@@ -0,0 +1,60 @@
+package com.macaroon.piztor;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class PiztorAct extends Activity {
+ String id;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ System.out.println(id + " on create");
+ AppMgr.setStatus(AppMgr.ActivityStatus.create);
+ AppMgr.nowAct = this;
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ System.out.println(id + " on start");
+ AppMgr.setStatus(AppMgr.ActivityStatus.start);
+ AppMgr.nowAct = this;
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ System.out.println(id + " on stop");
+ AppMgr.setStatus(AppMgr.ActivityStatus.stop);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ System.out.println(id + " on resume");
+ AppMgr.setStatus(AppMgr.ActivityStatus.resume);
+ AppMgr.nowAct = this;
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ System.out.println(id + " on pause");
+ AppMgr.setStatus(AppMgr.ActivityStatus.pause);
+ }
+
+ @Override
+ protected void onRestart() {
+ super.onRestart();
+ System.out.println(id + " on restart");
+ AppMgr.setStatus(AppMgr.ActivityStatus.restart);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ System.out.println(id + " on destroy");
+ AppMgr.setStatus(AppMgr.ActivityStatus.destroy);
+ }
+
+}
diff --git a/misc/client/README.rst b/misc/client/README.rst
new file mode 100644
index 0000000..ef377cc
--- /dev/null
+++ b/misc/client/README.rst
@@ -0,0 +1 @@
+Here is the folder of android app implementation
diff --git a/misc/client/Socket-demo/Login.java b/misc/client/Socket-demo/Login.java
new file mode 100644
index 0000000..2dd386c
--- /dev/null
+++ b/misc/client/Socket-demo/Login.java
@@ -0,0 +1,6 @@
+package com.example.test;
+
+public class Login{
+ void success(int t){}
+ void failed(){}
+} \ No newline at end of file
diff --git a/misc/client/Socket-demo/MainActivity.java b/misc/client/Socket-demo/MainActivity.java
new file mode 100644
index 0000000..ab2ef0c
--- /dev/null
+++ b/misc/client/Socket-demo/MainActivity.java
@@ -0,0 +1,44 @@
+package com.example.test;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.View;
+import android.widget.TextView;
+
+public class MainActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ TextView textview = (TextView)findViewById(R.id.textView1);
+ textview.setText("Server Created!");
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.main, menu);
+ return true;
+ }
+
+
+ public void sendMessage(View view) {
+
+ }
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
diff --git a/misc/client/Socket-demo/Myrequest.java b/misc/client/Socket-demo/Myrequest.java
new file mode 100644
index 0000000..e5bfce2
--- /dev/null
+++ b/misc/client/Socket-demo/Myrequest.java
@@ -0,0 +1,10 @@
+package com.example.test;
+
+import java.util.Vector;
+
+public class Myrequest{
+ public Vector<Object> contain;
+ Myrequest(){
+ contain = new Vector<Object>();
+ }
+} \ No newline at end of file
diff --git a/misc/client/Socket-demo/Myrespond.java b/misc/client/Socket-demo/Myrespond.java
new file mode 100644
index 0000000..ea6ef3b
--- /dev/null
+++ b/misc/client/Socket-demo/Myrespond.java
@@ -0,0 +1,12 @@
+package com.example.test;
+
+import java.util.Vector;
+
+public class Myrespond{
+ public Vector<Object> contain;
+ public String wrong;
+ Myrespond(){
+ wrong = null;
+ contain = new Vector<Object>();
+ }
+} \ No newline at end of file
diff --git a/misc/client/Socket-demo/SocketClient.java b/misc/client/Socket-demo/SocketClient.java
new file mode 100644
index 0000000..df42484
--- /dev/null
+++ b/misc/client/Socket-demo/SocketClient.java
@@ -0,0 +1,107 @@
+package com.example.test;
+
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+public class SocketClient {
+
+ static Socket client;
+
+ public SocketClient(String site, int port)throws UnknownHostException,IOException{
+ try{
+ client = new Socket(site,port);
+ }catch (UnknownHostException e){
+ throw e;
+ }catch (IOException e){
+ throw e;
+ }
+ }
+
+ public Myrespond sendMsg(Myrequest req)throws IOException{
+ try{
+ DataOutputStream out = new DataOutputStream(client.getOutputStream());
+ int tmp = (Integer) req.contain.get(0);
+ switch(tmp){
+ case 0:
+ String id = (String) req.contain.get(1);
+ String pass = (String) req.contain.get(2);
+ out.writeUTF(id);
+ out.writeUTF(pass);
+ break;
+ case 1:
+ int tk1 = (Integer) req.contain.get(1);
+ int acc = (Integer) req.contain.get(2);
+ String mess = (String) req.contain.get(3);
+ out.writeInt(tk1);
+ out.writeInt(acc);
+ out.writeUTF(mess);
+ break;
+ case 2:
+ int tk2 = (Integer) req.contain.get(1);
+ double slot = (Double) req.contain.get(2);
+ double slat = (Double) req.contain.get(3);
+ out.writeInt(tk2);
+ out.writeDouble(slot);
+ out.writeDouble(slat);
+ break;
+ case 3:
+ int tk3 = (Integer) req.contain.get(1);
+ int gid = (Integer) req.contain.get(2);
+ out.writeInt(tk3);
+ out.writeInt(gid);
+ break;
+ }
+ out.flush();
+ client.shutdownOutput();
+ DataInputStream in = new DataInputStream(client.getInputStream());
+ int type = in.readUnsignedByte();
+ Myrespond r = new Myrespond();
+ switch(type){
+ case 0:
+ int id = in.readInt();
+ int status = in.readUnsignedByte();
+ r.contain.add(0);
+ r.contain.add(id);
+ r.contain.add(status);
+ break;
+ case 1:
+ r.contain.add(1);
+ //reserved
+ break;
+ case 2:
+ r.contain.add(2);
+ //reserved
+ break;
+ case 3:
+ int n = in.readInt();
+ r.contain.add(3);
+ r.contain.add(n);
+ for(int i=1;i<=n;i++)
+ {
+ int tid = in.readInt();
+ double lot = in.readDouble();
+ double lat = in.readDouble();
+ r.contain.add(tid);
+ r.contain.add(lot);
+ r.contain.add(lat);
+ }
+ break;
+ }
+ return r;
+ }catch(IOException e){
+ throw e;
+ }
+ }
+ public void closeSocket(){
+ try{
+ client.close();
+ }catch(IOException e){
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/misc/client/Socket-demo/Transam.java b/misc/client/Socket-demo/Transam.java
new file mode 100644
index 0000000..b5e2381
--- /dev/null
+++ b/misc/client/Socket-demo/Transam.java
@@ -0,0 +1,125 @@
+package com.example.test;
+
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import android.annotation.SuppressLint;
+import android.os.Handler;
+import android.os.Message;
+
+public class Transam implements Runnable {
+ public Timer timer;
+ public boolean flag = true;
+ public boolean reqlog = false;
+ public int cnt = 4;
+ public int port;
+ public String ip;
+ Thread thread;
+ Myrequest req;
+ Myrespond res;
+ Controller core;
+ Login log;
+
+
+ Transam(String i,int p,Myrequest r,Login l){
+ port = p;
+ ip = i;
+ req = r;
+ log = l;
+ reqlog = true;
+ }
+
+ Transam(String i,int p,Myrequest r,Controller c){
+ port = p;
+ ip = i;
+ req = r;
+ core = c;
+ }
+
+ public void run() {
+ final thd t = new thd();
+ flag = false;
+ thread = new Thread(t);
+ cnt = 4;
+ thread.start();
+ timer = new Timer();
+ TimerTask task = new Timertk();
+ timer.schedule(task,2000,2000);
+ }
+
+ class thd implements Runnable {
+ @Override
+ public void run() {
+ try{
+ SocketClient client = new SocketClient(ip,port);
+ res = client.sendMsg(req);
+ if(!reqlog){
+ core.recieveInfo(res);
+ }
+ else{
+ if((Integer) res.contain.get(2)==0){
+ int t = (Integer) res.contain.get(1);
+ log.success(t);
+ }
+ else{
+ log.failed();
+ }
+ }
+ Message msg = new Message();
+ msg.what = 1;
+ handler.sendMessage(msg);
+ client.closeSocket();
+ }catch (UnknownHostException e){
+ }catch (IOException e){
+ }
+
+ }
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler(){
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case 1:
+ flag = true;
+ break;
+ case 2:
+ if(!reqlog){
+ res = new Myrespond();
+ res.wrong = msg.obj.toString();
+ core.recieveInfo(res);
+ }
+ else{
+ log.failed();
+ }
+ break;
+ case 3:
+ final thd t = new thd();
+ thread = new Thread(t);
+ thread.start();
+ break;
+ }
+ super.handleMessage(msg);
+ }
+ };
+
+ class Timertk extends TimerTask {
+ public void run() {
+ if(flag==false&&cnt>0){
+ cnt--;
+ }
+ else if(cnt==0) {
+ Message msg = new Message();
+ msg.obj = "connecting failed";
+ msg.what = 2;
+ handler.sendMessage(msg);
+ timer.cancel();
+ }
+ else if(flag==true){
+ timer.cancel();
+ }
+ }
+ };
+} \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/.AndroidManifest.xml.swp b/misc/client/gps-demo/AndroidGPSTracking/.AndroidManifest.xml.swp
new file mode 100644
index 0000000..d03b360
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/.AndroidManifest.xml.swp
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/.classpath b/misc/client/gps-demo/AndroidGPSTracking/.classpath
new file mode 100644
index 0000000..5176974
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/misc/client/gps-demo/AndroidGPSTracking/.project b/misc/client/gps-demo/AndroidGPSTracking/.project
new file mode 100644
index 0000000..a080853
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>AndroidGPSTracking</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/misc/client/gps-demo/AndroidGPSTracking/.settings/org.eclipse.jdt.core.prefs b/misc/client/gps-demo/AndroidGPSTracking/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..b080d2d
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/misc/client/gps-demo/AndroidGPSTracking/AndroidManifest.xml b/misc/client/gps-demo/AndroidGPSTracking/AndroidManifest.xml
new file mode 100644
index 0000000..137894c
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example.gpstracking"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk android:minSdkVersion="8" />
+
+ <application
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name" >
+ <activity
+ android:name=".AndroidGPSTrackingActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.INTERNET" />
+
+</manifest> \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidGPSTracking.apk b/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidGPSTracking.apk
new file mode 100644
index 0000000..985304a
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidGPSTracking.apk
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidManifest.xml b/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidManifest.xml
new file mode 100644
index 0000000..137894c
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example.gpstracking"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-sdk android:minSdkVersion="8" />
+
+ <application
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name" >
+ <activity
+ android:name=".AndroidGPSTrackingActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.INTERNET" />
+
+</manifest> \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes.dex b/misc/client/gps-demo/AndroidGPSTracking/bin/classes.dex
new file mode 100644
index 0000000..1a8d494
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes.dex
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity$1.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity$1.class
new file mode 100644
index 0000000..3367336
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity$1.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity.class
new file mode 100644
index 0000000..7df00e1
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/BuildConfig.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/BuildConfig.class
new file mode 100644
index 0000000..15960aa
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/BuildConfig.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$1.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$1.class
new file mode 100644
index 0000000..8e2ea2b
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$1.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$2.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$2.class
new file mode 100644
index 0000000..572f305
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$2.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker.class
new file mode 100644
index 0000000..6f6bd93
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$attr.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$attr.class
new file mode 100644
index 0000000..1dbe417
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$attr.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$drawable.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$drawable.class
new file mode 100644
index 0000000..f46f86d
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$drawable.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$id.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$id.class
new file mode 100644
index 0000000..7d48158
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$id.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$layout.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$layout.class
new file mode 100644
index 0000000..08f0ade
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$layout.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$string.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$string.class
new file mode 100644
index 0000000..7c72195
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$string.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R.class b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R.class
new file mode 100644
index 0000000..7f0475e
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R.class
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar b/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar
new file mode 100644
index 0000000..61505d5
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/jarlist.cache b/misc/client/gps-demo/AndroidGPSTracking/bin/jarlist.cache
new file mode 100644
index 0000000..0565465
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/jarlist.cache
@@ -0,0 +1,3 @@
+# cache for current jar dependency. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-hdpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..882eb14
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-ldpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..18689f6
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-ldpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-mdpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..02e96b9
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_ b/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_
new file mode 100644
index 0000000..8c035b7
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/default.properties b/misc/client/gps-demo/AndroidGPSTracking/default.properties
new file mode 100644
index 0000000..32299c2
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/default.properties
@@ -0,0 +1,2 @@
+# Project target.
+target=android-8
diff --git a/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/BuildConfig.java b/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/BuildConfig.java
new file mode 100644
index 0000000..c164cb3
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/BuildConfig.java
@@ -0,0 +1,6 @@
+/** Automatically generated file. DO NOT MODIFY */
+package com.example.gpstracking;
+
+public final class BuildConfig {
+ public final static boolean DEBUG = true;
+} \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/R.java b/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/R.java
new file mode 100644
index 0000000..c747309
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/gen/com/example/gpstracking/R.java
@@ -0,0 +1,26 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package com.example.gpstracking;
+
+public final class R {
+ public static final class attr {
+ }
+ public static final class drawable {
+ public static final int ic_launcher=0x7f020000;
+ }
+ public static final class id {
+ public static final int btnShowLocation=0x7f050000;
+ }
+ public static final class layout {
+ public static final int main=0x7f030000;
+ }
+ public static final class string {
+ public static final int app_name=0x7f040001;
+ public static final int hello=0x7f040000;
+ }
+}
diff --git a/misc/client/gps-demo/AndroidGPSTracking/proguard.cfg b/misc/client/gps-demo/AndroidGPSTracking/proguard.cfg
new file mode 100644
index 0000000..b1cdf17
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/proguard.cfg
@@ -0,0 +1,40 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.app.Activity {
+ public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+ public static final android.os.Parcelable$Creator *;
+}
diff --git a/misc/client/gps-demo/AndroidGPSTracking/project.properties b/misc/client/gps-demo/AndroidGPSTracking/project.properties
new file mode 100644
index 0000000..ea89160
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/project.properties
@@ -0,0 +1,11 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-8
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/drawable-hdpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..efc8f0a
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/drawable-ldpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..efc8f0a
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-ldpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/drawable-mdpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..efc8f0a
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/drawable-xhdpi/ic_launcher.png b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..efc8f0a
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/layout/main.xml b/misc/client/gps-demo/AndroidGPSTracking/res/layout/main.xml
new file mode 100644
index 0000000..430efa2
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/layout/main.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
+
+ <Button android:id="@+id/btnShowLocation"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Show Location"
+ android:layout_centerVertical="true"
+ android:layout_centerHorizontal="true"/>
+
+</RelativeLayout> \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/res/values/strings.xml b/misc/client/gps-demo/AndroidGPSTracking/res/values/strings.xml
new file mode 100644
index 0000000..6c854c3
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/res/values/strings.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="hello">Hello World, AndroidGPSTrackingActivity!</string>
+ <string name="app_name">AndroidGPSTracking</string>
+
+</resources> \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java
new file mode 100644
index 0000000..cdc1413
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/AndroidGPSTrackingActivity.java
@@ -0,0 +1,50 @@
+package com.example.gpstracking;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+public class AndroidGPSTrackingActivity extends Activity {
+
+ Button btnShowLocation;
+
+ // GPSTracker class
+ GPSTracker gps;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
+
+ // show location button click event
+ btnShowLocation.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View arg0) {
+ // create class object
+ gps = new GPSTracker(AndroidGPSTrackingActivity.this);
+
+ // check if GPS enabled
+ if(gps.canGetLocation()){
+
+ double latitude = gps.getLatitude();
+ double longitude = gps.getLongitude();
+
+ Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
+ }else{
+ // can't get location
+ // GPS or Network is not enabled
+ // Ask user to enable GPS/network in settings
+ gps.showSettingsAlert();
+ }
+
+ }
+ });
+ }
+
+} \ No newline at end of file
diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java
new file mode 100644
index 0000000..f1e77ad
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/GPSTracker.java
@@ -0,0 +1,200 @@
+package com.example.gpstracking;
+
+import android.app.AlertDialog;
+import android.app.Service;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.provider.Settings;
+import android.util.Log;
+
+public class GPSTracker extends Service implements LocationListener {
+
+ private final Context mContext;
+
+ // flag for GPS status
+ boolean isGPSEnabled = false;
+
+ // flag for network status
+ boolean isNetworkEnabled = false;
+
+ // flag for GPS status
+ boolean canGetLocation = false;
+
+ Location location; // location
+ double latitude; // latitude
+ double longitude; // longitude
+
+ // The minimum distance to change Updates in meters
+ private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
+
+ // The minimum time between updates in milliseconds
+ private static final long MIN_TIME_BW_UPDATES = 10 * 60 * 1; // 1 minute
+
+ // Declaring a Location Manager
+ protected LocationManager locationManager;
+
+ public GPSTracker(Context context) {
+ this.mContext = context;
+ getLocation();
+ }
+
+ public Location getLocation() {
+ try {
+ locationManager = (LocationManager) mContext
+ .getSystemService(LOCATION_SERVICE);
+
+ // getting GPS status
+ isGPSEnabled = locationManager
+ .isProviderEnabled(LocationManager.GPS_PROVIDER);
+
+ // getting network status
+ isNetworkEnabled = locationManager
+ .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
+
+ if (!isGPSEnabled && !isNetworkEnabled) {
+ // no network provider is enabled
+ } else {
+ this.canGetLocation = true;
+ if (isNetworkEnabled) {
+ locationManager.requestLocationUpdates(
+ LocationManager.NETWORK_PROVIDER,
+ MIN_TIME_BW_UPDATES,
+ MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+ Log.d("Network", "Network");
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+ }
+ }
+ }
+ // if GPS Enabled get lat/long using GPS Services
+ if (isGPSEnabled) {
+ if (location == null) {
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER,
+ MIN_TIME_BW_UPDATES,
+ MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+ Log.d("GPS Enabled", "GPS Enabled");
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.GPS_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+ }
+ }
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return location;
+ }
+
+ /**
+ * Stop using GPS listener
+ * Calling this function will stop using GPS in your app
+ */
+ public void stopUsingGPS(){
+ if(locationManager != null){
+ locationManager.removeUpdates(GPSTracker.this);
+ }
+ }
+
+ /**
+ * Function to get latitude
+ */
+ public double getLatitude(){
+ if(location != null){
+ latitude = location.getLatitude();
+ }
+
+ // return latitude
+ return latitude;
+ }
+
+ /**
+ * Function to get longitude
+ */
+ public double getLongitude(){
+ if(location != null){
+ longitude = location.getLongitude();
+ }
+
+ // return longitude
+ return longitude;
+ }
+
+ /**
+ * Function to check GPS/wifi enabled
+ * @return boolean
+ */
+ public boolean canGetLocation() {
+ return this.canGetLocation;
+ }
+
+ /**
+ * Function to show settings alert dialog
+ * On pressing Settings button will lauch Settings Options
+ */
+ public void showSettingsAlert(){
+ AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
+
+ // Setting Dialog Title
+ alertDialog.setTitle("GPS is settings");
+
+ // Setting Dialog Message
+ alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
+
+ // On pressing Settings button
+ alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog,int which) {
+ Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ mContext.startActivity(intent);
+ }
+ });
+
+ // on pressing cancel button
+ alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ });
+
+ // Showing Alert Message
+ alertDialog.show();
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ }
+
+ @Override
+ public IBinder onBind(Intent arg0) {
+ return null;
+ }
+}
diff --git a/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java
new file mode 100644
index 0000000..2e08a91
--- /dev/null
+++ b/misc/client/gps-demo/AndroidGPSTracking/src/com/example/gpstracking/Tracker.java
@@ -0,0 +1,33 @@
+package com.example.gpstracking;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class Tracker implements Runnable {
+
+ private static final long TIME_DELTA = 1000 * 60 * 5;
+
+ Controller controller;
+
+ public Tracker(Controller newController) {
+ controller = newController;
+ }
+
+ public void run() {
+ public Timer timer;
+ TimerTask task = new GPSTask();
+ timer.schedule(new GPSTask(), 0, TIME_DELTA);
+ }
+
+ class GPSTask extends TimerTask {
+ public void run() {
+ GPSTracker tracker;
+ tracker = new GPSTracker(Tracker.this);
+
+ double latitude = tracker.getLatitude();
+ double longitude = tracker.getLongitude();
+
+ controller.recieveLocation(latitude, longitude);
+ }
+ }
+}
diff --git a/misc/features b/misc/features
new file mode 100644
index 0000000..efe2bf9
--- /dev/null
+++ b/misc/features
@@ -0,0 +1,18 @@
+2013-08-20
+基本功能:
+
+1.把用户的位置显示在地图上,并且发送给所有用户
+2.班长用户组可以在地图上标识目标地点,发送给所有班级内成员
+3.用户管理中包含团队建制,同一区域内不同班级以不同的颜色(或配色)显示
+4.班长可以给全班发送消息
+5.地图的缩放
+
+预期功能:
+1.组员可以在设定好的路标处进行报道,全员报道后给出下一个路标,进行类似定向越野的活动
+2.在路标处要回答问题才可以得到下一个路标,或者下一个路标通过一些信息间接给出
+3.对于不在线的队员进行特殊显示
+4.对于同一区域内团队过多的情况进行特殊处理,比如显示范围过大时
+5.路标处的计时,多个团队进行评分
+6.搜索队员位置
+7.点击显示队员详情
+8.通知区域提醒
diff --git a/misc/main_ui_logic.jpg b/misc/main_ui_logic.jpg
new file mode 100644
index 0000000..b6ca916
--- /dev/null
+++ b/misc/main_ui_logic.jpg
Binary files differ
diff --git a/misc/preview.jpg b/misc/preview.jpg
new file mode 100644
index 0000000..c5045de
--- /dev/null
+++ b/misc/preview.jpg
Binary files differ
diff --git a/misc/schedule.rst b/misc/schedule.rst
new file mode 100644
index 0000000..bdec0f4
--- /dev/null
+++ b/misc/schedule.rst
@@ -0,0 +1,21 @@
+=========== =================================================================
+Date Events
+=========== =================================================================
+Aug 22 - 搭建方便快捷的实测环境,编译并在手机上运行第一个demo --- done
+ - 简单server和android的数据交换测试 --- done
+ - 制定数据交换标准 --- almost
+ - android UI各类事件捕获 --- done
+ - UI和功能设计(画出层次图)--- not yet
+ - 地图缩放功能 --- in progress
+
+Aug 23 - 制定数据交换标准
+ - 开始设计完整的server, 初步完成Chat server
+ - android UI按照设计实现部分界面,与Chat server对接
+
+Aug 24 - Location Management and Sync Issue
+ - 更成熟的交互界面,尝试加入GPS座标读取
+ - 诸多功能的设计
+
+Aug 25 - 共享并绘制位置,解决一些问题
+ - 考虑必要的附加功能
+=========== =================================================================
diff --git a/misc/server/README.rst b/misc/server/README.rst
new file mode 100644
index 0000000..e88c745
--- /dev/null
+++ b/misc/server/README.rst
@@ -0,0 +1 @@
+Here is the folder of server-side implementation
diff --git a/misc/server/client.py b/misc/server/client.py
new file mode 100644
index 0000000..15f4bbc
--- /dev/null
+++ b/misc/server/client.py
@@ -0,0 +1,58 @@
+import socket
+import sys
+from struct import *
+from random import random
+from time import sleep
+
+def get_hex(data):
+ return "".join([hex(ord(c))[2:].zfill(2) for c in data])
+
+HOST, PORT = "localhost", 9990
+
+def gen_auth(username, password):
+ data = pack("!B", 0)
+ data += username
+ data += "\0"
+ data += password
+ return data
+
+def gen_update_location(token, lat, lont):
+ return pack("!BLdd", 2, token, lat, lont)
+
+def gen_request_location(token, gid):
+ return pack("!BLL", 3, token, gid)
+
+def send(data):
+ try:
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.connect((HOST, PORT))
+# print "Client " + str(sys.argv[1]) + ": connected"
+ sock.sendall(data)
+ print get_hex(data)
+# print "Client " + str(sys.argv[1]) + ": sent"
+# sock.shutdown(socket.SHUT_WR)
+# print "Client " + str(sys.argv[1]) + ": shutdown"
+ received = sock.recv(1024)
+ finally:
+ print "adf"
+ sock.close()
+
+ print "Sent {}".format(get_hex(data))
+ print "Received: {}".format(get_hex(data))
+ return received
+
+#print "Client spawned:" + str(sys.argv[1])
+rec = send(gen_auth("hello", "world"))
+opt, token, status = unpack("!BLB", rec)
+
+rec = send(gen_update_location(token, random(), random()))
+opc, status = unpack("!BB", rec)
+
+rec = send(gen_request_location(token, 1))
+opc, length = unpack("!BL", rec[:5])
+idx = 5
+for i in xrange(length):
+ uid, lat, lng = unpack("!Ldd", rec[idx:idx + 20])
+ print (uid, lat, lng)
+ idx += 20
+# sleep(60)
diff --git a/misc/server/piztor/exc.py b/misc/server/piztor/exc.py
new file mode 100644
index 0000000..2c53dbf
--- /dev/null
+++ b/misc/server/piztor/exc.py
@@ -0,0 +1,17 @@
+class PiztorError(Exception):
+ pass
+
+class DBCurruptedError(PiztorError):
+ pass
+
+class ConnectionError(PiztorError):
+ pass
+
+class ReqReadError(ConnectionError):
+ pass
+
+class BadReqError(ConnectionError):
+ pass
+
+class BadTokenError(ConnectionError):
+ pass
diff --git a/misc/server/piztor/import.py b/misc/server/piztor/import.py
new file mode 100644
index 0000000..84c990f
--- /dev/null
+++ b/misc/server/piztor/import.py
@@ -0,0 +1,45 @@
+from sqlalchemy import create_engine
+from sqlalchemy.orm import sessionmaker
+from model import *
+
+path = "piztor.sqlite"
+
+class UserData:
+ def __init__(self, username, password, gid, sex):
+ self.username = username
+ self.password = password
+ self.gid = gid
+ self.sex = sex
+
+def create_database():
+ engine = create_engine('sqlite:///' + path, echo = True)
+ Base.metadata.drop_all(engine)
+ Base.metadata.create_all(engine)
+
+def import_user_data(data):
+ engine = create_engine('sqlite:///' + path, echo = True)
+ Session = sessionmaker(bind = engine)
+ session = Session()
+ for user in data:
+ um = UserModel(username = user.username, gid = user.gid, sex = user.sex)
+ um.auth = UserAuth(user.password)
+ um.location = LocationInfo(lat = 0, lng = 0)
+ session.add(um)
+ session.commit()
+
+if __name__ == '__main__':
+
+ from sys import argv, exit
+ if len(argv) != 2:
+ print "Usage: " + argv[0] + " FILE"
+ exit(0)
+
+ data = list()
+ with open(argv[1], 'r') as f:
+ while True:
+ line = f.readline().split()
+ if len(line) == 0: break
+ data.append(UserData(line[0], line[1], line[2], line[3]))
+
+ create_database()
+ import_user_data(data)
diff --git a/misc/server/piztor/model.py b/misc/server/piztor/model.py
new file mode 100644
index 0000000..4621bbe
--- /dev/null
+++ b/misc/server/piztor/model.py
@@ -0,0 +1,80 @@
+from sqlalchemy import Column, Integer, String, Float, ForeignKey, LargeBinary, Boolean
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship, backref
+
+Base = declarative_base()
+
+_SALT_LEN = 16
+_TOKEN_LEN = 16
+
+class _TableName: # avoid typoes
+ UserModel = 'users'
+ LocationInfo = 'location_info'
+ UserAuth = 'user_auth'
+
+class UserModel(Base):
+ __tablename__ = _TableName.UserModel
+
+ id = Column(Integer, primary_key = True)
+ gid = Column(Integer)
+ username = Column(String)
+ sex = Column(Boolean)
+ location = None
+ auth = None
+
+class LocationInfo(Base):
+ __tablename__ = _TableName.LocationInfo
+
+ uid = Column(Integer, ForeignKey(_TableName.UserModel + '.id'), primary_key = True)
+ lat = Column(Float(precesion = 64))
+ lng = Column(Float(precesion = 64))
+ user = relationship("UserModel", uselist = False,
+ backref = backref("location", uselist = False,
+ cascade = "all, delete-orphan"))
+
+ # More: last_update
+
+from hashlib import sha256
+from os import urandom
+
+def _sprinkle_salt(uauth, passwd):
+ data = sha256(uauth.salt)
+ data.update(chr(0))
+ data.update(passwd)
+ return data.digest()
+
+def _random_binary_string(length):
+ return urandom(length)
+
+class UserAuth(Base):
+ __tablename__ = _TableName.UserAuth
+
+ uid = Column(Integer, ForeignKey(_TableName.UserModel + '.id'), primary_key = True)
+ password = Column(LargeBinary)
+ salt = Column(LargeBinary)
+ token = Column(LargeBinary)
+
+ user = relationship("UserModel", uselist = False,
+ backref = backref("auth", uselist = False,
+ cascade = "all, delete-orphan"))
+
+ def regen_token(self):
+ self.token = sha256(_random_binary_string(_TOKEN_LEN)).digest()
+
+ def __init__(self, passwd):
+ self.set_password(passwd)
+
+ def set_password(self, passwd):
+ self.salt = _random_binary_string(_SALT_LEN)
+ self.password = _sprinkle_salt(self, passwd)
+ self.regen_token()
+
+ def check_password(self, passwd):
+ passwd = _sprinkle_salt(self, passwd)
+ return passwd == self.password
+
+ def check_token(self, tk):
+ return self.token == tk
+
+ def get_token(self):
+ return self.token
diff --git a/misc/server/piztor_server.py b/misc/server/piztor_server.py
new file mode 100644
index 0000000..81805b3
--- /dev/null
+++ b/misc/server/piztor_server.py
@@ -0,0 +1,234 @@
+import sqlalchemy
+import SocketServer, socket, select
+import struct
+import os
+
+from sqlalchemy import create_engine
+from sqlalchemy import Column, Integer, String, Float
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker
+from random import randint
+
+engine = create_engine('sqlite:///t.sqlite', echo = False)
+Base = declarative_base()
+Session = sessionmaker(bind=engine)
+
+def get_hex(data):
+ return "".join([hex(ord(c))[2:].zfill(2) for c in data])
+
+class PiztorError(Exception):
+ def __init__(self, msg):
+ self.err_msg = msg
+ def __str__(self, msg):
+ return self.err_msg
+
+class ConnectionError(PiztorError):
+ pass
+
+class ReqReadError(ConnectionError):
+ def __init__(self):
+ super(ReqReadError, self).__init__("Error while reading request")
+
+class ReqInvalidError(ConnectionError):
+ def __init__(self):
+ super(ReqInvalidError, self).__init__("Invalid request")
+
+class TokenInvalidError(ConnectionError):
+ def __init__(self):
+ super(TokenInvalidError, self).__init__("Invalid token")
+
+class DataManager(object):
+ def __init__(self, piz_srv):
+ self.piz_srv = piz_srv
+
+class UserManager(DataManager):
+
+ class User(Base):
+ __tablename__ = 'users'
+ id = Column(Integer, primary_key = True)
+ gid = Column(Integer)
+ username = Column(String)
+ password = Column(String)
+ token = Column(Integer)
+
+ def get_user_by_token(self, token):
+ session = Session()
+ User = UserManager.User
+ entries = session.query(User).filter(User.token == token).all()
+ if len(entries) == 0:
+ raise TokenInvalidError()
+ return entries[0]
+
+ def authentication_handle(self, opt_type, data):
+ print "Parsing User Data"
+ pos = -1
+ for i in xrange(0, len(data)):
+ if data[i] == '\0':
+ print i
+ if pos != -1:
+ raise ReqInvalidError()
+ pos = i
+ break
+ if pos == -1:
+ raise ReqInvalidError()
+ username = data[0:pos]
+ password = data[pos + 1:]
+
+ print "Trying to login with following info:"
+ print (username, password)
+
+ session = Session()
+ entries = session.query(UserManager.User). \
+ filter(UserManager.User.username == username).all()
+ if len(entries) == 0:
+ return struct.pack("!BLB", 0, 0, 1)
+ entry = entries[0]
+ if entry.password != password: # Auth failed
+ print "Login failed!"
+ return struct.pack("!BLB", 0, 0, 1)
+ else: # Succeeded
+ print "Logged in sucessfully!"
+ entry.token = randint(0, 2147483647)
+ session.commit()
+ return struct.pack("!BLB", 0, entry.token, 0)
+
+
+class MesgManager(DataManager):
+ def mesg_sending_handle(self, opt_type, data):
+ print "Parsing Mesg Data"
+ try:
+ if len(data) < 8:
+ raise ReqInvalidError()
+ sender_token, recv_id = struct.unpack("!LL", data[:8])
+ msg = data[8:]
+ print (sender_token, recv_id, msg)
+ return struct.pack("!B", 1)
+ except struct.error:
+ raise ReqInvalidError()
+
+class LocationManager(DataManager):
+
+ class LocationInfo(Base):
+ __tablename__ = "location_info"
+ uid = Column(Integer, primary_key = True)
+ lat = Column(Float(precesion = 64))
+ lng = Column(Float(precesion = 64))
+ # More: last_update
+
+ def location_update_handle(self, opt_type, data):
+ print "Parsing a Location Update"
+ try:
+ if len(data) < 8:
+ raise ReqInvalidError()
+ sender_token, lat, lng = struct.unpack("!Ldd", data)
+ print "Updating location data with following info:"
+ print (sender_token, lat, lng)
+
+ user = self.piz_srv. \
+ user_mgr.get_user_by_token(sender_token)
+ session = Session()
+ LInfo = LocationManager.LocationInfo
+ q = session.query(LInfo).filter(LInfo.uid == user.id)
+ entry = q.first()
+ entry.lat = lat
+ entry.lng = lng
+ session.commit()
+ print "Location update succeeded!"
+ return struct.pack("!BB", 2, 0)
+ except TokenInvalidError:
+ print "Location update failed!"
+ return struct.pack("!BB", 2, 1)
+ except struct.error:
+ raise ReqInvalidError()
+
+ def location_request_handle(self, opt_type, data):
+ print "Parsing a Location Request"
+ try:
+ if len(data) != 8:
+ raise ReqInvalidError()
+ sender_token, gid = struct.unpack("!LL", data)
+ print "Requesting location data with following info:"
+ print (sender_token, gid)
+ session = Session()
+ UInfo = UserManager.User
+ LInfo = LocationManager.LocationInfo
+ user_list = session.query(UInfo).filter(UInfo.gid == gid).all()
+ reply = struct.pack("!BL", 3, len(user_list))
+ for user in user_list:
+ loc = session.query(LInfo).filter(LInfo.uid == user.id).first()
+ reply += struct.pack("!Ldd", user.id, loc.lat, loc.lng)
+ print get_hex(reply)
+ return reply
+ except struct.error:
+ raise ReqInvalidError()
+
+class PiztorServer():
+
+
+ class GenericHandler(SocketServer.StreamRequestHandler):
+
+ def handle(self):
+ print self.piz_srv
+ sock = self.request
+ sock.settimeout(100)
+# sock.setblocking(0)
+ data = ""
+ try:
+ while True:
+# ready = select.select([sock], [], [], 10)
+# if not ready[0]:
+# raise ReqReadError()
+ buff = sock.recv(4096)
+ if len(buff) == 0:
+ break # terminated
+ else:
+ data += buff
+ sock.shutdown(socket.SHUT_RD)
+
+ print "Got the data:" + get_hex(data)
+
+ if len(data) < 1:
+ print "invalid length"
+ raise ReqInvalidError()
+ opt_id = struct.unpack("!B", data[0])[0]
+ print opt_id
+ reply = self.piz_srv.mgr_map[opt_id](opt_id, data[1:])
+ sock.sendall(reply)
+ finally:
+ sock.close()
+
+ class ForkingEchoServer(SocketServer.ForkingMixIn, SocketServer.TCPServer):
+ pass
+
+ def __init__(self, host, port):
+ PiztorServer.GenericHandler.piz_srv = self
+ srv = PiztorServer.ForkingEchoServer((host, port),
+ PiztorServer.GenericHandler)
+ srv.request_queue_size = 100
+# srv.timeout = 2
+ self.server = srv
+
+ self.user_mgr = UserManager(self)
+ self.mesg_mgr = MesgManager(self)
+ self.location_mgr = LocationManager(self)
+
+ self.mgr_map = [ self.user_mgr.authentication_handle,
+ self.mesg_mgr.mesg_sending_handle,
+ self.location_mgr.location_update_handle,
+ self.location_mgr.location_request_handle]
+
+ Base.metadata.create_all(engine)
+
+
+ def run(self):
+ try:
+ self.server.serve_forever()
+ except KeyboardInterrupt:
+ print "Exiting..."
+ self.server.shutdown()
+ print "Server shutdown"
+
+if __name__ == "__main__":
+
+ ps = PiztorServer("localhost", 9999)
+ ps.run()
diff --git a/misc/server/ptp.rst b/misc/server/ptp.rst
new file mode 100644
index 0000000..7c40a3b
--- /dev/null
+++ b/misc/server/ptp.rst
@@ -0,0 +1,105 @@
+Piztor Transmission Protocol v0.3
+---------------------------------
+
+- General
+
+ - Request
+
+ ::
+
+ +---4b---+---1b---+-------?b--------+
+ | LENGTH | OPT_ID | SPECIFIC DATA |
+ +--int---+-uchar--+-----------------+
+
+ - Response
+
+ ::
+
+ +---4b---+---1b---+------?b---------+
+ | LENGTH | OPT_ID | SPECIFIC DATA |
+ +--int---+-uchar--+-----------------+
+
+ Notice:
+
+ - In following sections, ``LENGTH`` part is left out for clarity.
+ - ``PADDING`` has value ``0``.
+ - ``AUTH_HEAD`` structure:
+
+ ::
+
+ +----32b-----+----?b----+----1b---+
+ | USER_TOKEN | USERNAME | PADDING |
+ +----raw-----+----------+---------+
+
+- Authentication
+
+ - Request
+
+ ::
+
+ +--1b---+-----?b------+----1b----+-----?b-----+
+ | 0x00 | USERNAME | PADDING | PASSWORD |
+ +-uchar-+-------------+----------+------------+
+
+ - Response
+
+ ::
+
+ +--1b---+---1b---+---4b----+----32b-----+
+ | 0x00 | STATUS | USER_ID | USER_TOKEN |
+ +-uchar-+--uchar-+---int---+----raw-----+
+
+ ``STATUS`` :
+
+ - ``0x00`` for success
+ - ``0x01`` for failure
+
+- Location Update
+
+ - Request
+
+ ::
+
+ +--1b---+-----?b------+----8b------+------8b-----+
+ | 0x01 | AUTH_HEAD | LATITUDE | LONGITUDE |
+ +-uchar-+-------------+---double---+---double----+
+
+ - Response
+
+ ::
+
+ +--1b---+---1b---+
+ | 0x01 | STATUS |
+ +-uchar-+--uchar-+
+
+ ``STATUS`` :
+
+ - ``0x00`` for success
+ - ``0x01`` for invalid token
+
+- Location Information
+
+ - Request
+
+ ::
+
+ +--1b---+------?b------+------4b-----+
+ | 0x02 | AUTH_HEAD | GROUP_ID |
+ +-uchar-+--------------+-----int-----+
+
+ - Response
+
+ ::
+
+ +--1b---+---1b---+-----4b----+------20b-------+-----+
+ | 0x02 | STATUS | ENTRY_CNT | LOCATION_ENTRY | ... |
+ +-uchar-+-uchar--+----int----+----------------+-----+
+
+ ``LOCATION_ENTRY`` :
+
+ ::
+
+ +---4b----+----8b----+-----8b----+
+ | USER_ID | LATITUDE | LONGITUDE |
+ +---int---+--double--+--double---+
+
diff --git a/misc/server/rush.py b/misc/server/rush.py
new file mode 100644
index 0000000..f01804c
--- /dev/null
+++ b/misc/server/rush.py
@@ -0,0 +1,14 @@
+from subprocess import Popen
+procs = []
+
+try:
+ for i in xrange(10):
+ p = Popen(["python", "client.py", str(i)])
+ procs.append(p)
+ #p.wait()
+ print "done"
+
+except KeyboardInterrupt:
+ print "killing"
+ for p in procs:
+ p.kill()