diff options
author | Teddy <[email protected]> | 2013-08-25 17:55:34 +0800 |
---|---|---|
committer | Teddy <[email protected]> | 2013-08-25 17:55:34 +0800 |
commit | f4d0989ae888bc2f83f0bc09cc826f7c79b1b6b5 (patch) | |
tree | 79c9fbb49a5a857c56843cef01b032e3430aa085 /misc | |
parent | f74999631c4f83a0c8532d6b7adb348dcd5d5205 (diff) | |
parent | 0a76dad753ed88a7575c2aafdd068ef6caa7247f (diff) |
Merge branch 'master' of github.com:Determinant/piztor
Diffstat (limited to 'misc')
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 Binary files differnew file mode 100644 index 0000000..1b1c693 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActMgr.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class Binary files differnew file mode 100644 index 0000000..1f3df48 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/ActStatus.class 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 Binary files differnew file mode 100644 index 0000000..496344b --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr$ActivityStatus.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class Binary files differnew file mode 100644 index 0000000..107bcad --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/AppMgr.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class Binary files differnew file mode 100644 index 0000000..566eb01 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/BuildConfig.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class Binary files differnew file mode 100644 index 0000000..c656689 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/EmptyStatus.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class Binary files differnew file mode 100644 index 0000000..6a8e04d --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/InitAct.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class Binary files differnew file mode 100644 index 0000000..4a3fc81 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/PiztorAct.class 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 Binary files differnew file mode 100644 index 0000000..a95e1ab --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$attr.class 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 Binary files differnew file mode 100644 index 0000000..4bc657f --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$dimen.class 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 Binary files differnew file mode 100644 index 0000000..5444d98 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$drawable.class 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 Binary files differnew file mode 100644 index 0000000..8577179 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$id.class 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 Binary files differnew file mode 100644 index 0000000..fab7556 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$layout.class 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 Binary files differnew file mode 100644 index 0000000..cec6e5a --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$menu.class 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 Binary files differnew file mode 100644 index 0000000..a78c834 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$string.class 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 Binary files differnew file mode 100644 index 0000000..42ddcce --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R$style.class diff --git a/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class Binary files differnew file mode 100644 index 0000000..d173856 --- /dev/null +++ b/misc/client/Piztor/bin/classes/com/macaroon/piztor/R.class 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 Binary files differnew file mode 100644 index 0000000..a18cbb4 --- /dev/null +++ b/misc/client/Piztor/ic_launcher-web.png diff --git a/misc/client/Piztor/libs/android-support-v4.jar b/misc/client/Piztor/libs/android-support-v4.jar Binary files differnew file mode 100644 index 0000000..cf12d28 --- /dev/null +++ b/misc/client/Piztor/libs/android-support-v4.jar 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 Binary files differnew file mode 100644 index 0000000..288b665 --- /dev/null +++ b/misc/client/Piztor/res/drawable-hdpi/ic_launcher.png diff --git a/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..6ae570b --- /dev/null +++ b/misc/client/Piztor/res/drawable-mdpi/ic_launcher.png diff --git a/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..d4fb7cd --- /dev/null +++ b/misc/client/Piztor/res/drawable-xhdpi/ic_launcher.png diff --git a/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png b/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..85a6081 --- /dev/null +++ b/misc/client/Piztor/res/drawable-xxhdpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..d03b360 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/.AndroidManifest.xml.swp 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 Binary files differnew file mode 100644 index 0000000..985304a --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/AndroidGPSTracking.apk 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 Binary files differnew file mode 100644 index 0000000..1a8d494 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes.dex 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 Binary files differnew file mode 100644 index 0000000..3367336 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity$1.class 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 Binary files differnew file mode 100644 index 0000000..7df00e1 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/AndroidGPSTrackingActivity.class 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 Binary files differnew file mode 100644 index 0000000..15960aa --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/BuildConfig.class 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 Binary files differnew file mode 100644 index 0000000..8e2ea2b --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$1.class 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 Binary files differnew file mode 100644 index 0000000..572f305 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker$2.class 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 Binary files differnew file mode 100644 index 0000000..6f6bd93 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/GPSTracker.class 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 Binary files differnew file mode 100644 index 0000000..1dbe417 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$attr.class 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 Binary files differnew file mode 100644 index 0000000..f46f86d --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$drawable.class 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 Binary files differnew file mode 100644 index 0000000..7d48158 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$id.class 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 Binary files differnew file mode 100644 index 0000000..08f0ade --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$layout.class 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 Binary files differnew file mode 100644 index 0000000..7c72195 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R$string.class 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 Binary files differnew file mode 100644 index 0000000..7f0475e --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/classes/com/example/gpstracking/R.class diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar b/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar Binary files differnew file mode 100644 index 0000000..61505d5 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/dexedLibs/annotations-5b022f4578500e25e3bfa446659bd7d8.jar 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 Binary files differnew file mode 100644 index 0000000..882eb14 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-hdpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..18689f6 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-ldpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..02e96b9 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/res/drawable-mdpi/ic_launcher.png diff --git a/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_ b/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_ Binary files differnew file mode 100644 index 0000000..8c035b7 --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/bin/resources.ap_ 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 Binary files differnew file mode 100644 index 0000000..efc8f0a --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-hdpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..efc8f0a --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-ldpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..efc8f0a --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-mdpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..efc8f0a --- /dev/null +++ b/misc/client/gps-demo/AndroidGPSTracking/res/drawable-xhdpi/ic_launcher.png 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 Binary files differnew file mode 100644 index 0000000..b6ca916 --- /dev/null +++ b/misc/main_ui_logic.jpg diff --git a/misc/preview.jpg b/misc/preview.jpg Binary files differnew file mode 100644 index 0000000..c5045de --- /dev/null +++ b/misc/preview.jpg 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() |