summaryrefslogtreecommitdiff
path: root/client/Piztor/src
diff options
context:
space:
mode:
authorgoblin911 <[email protected]>2013-08-25 21:18:19 +0800
committergoblin911 <[email protected]>2013-08-25 21:18:19 +0800
commit0e687f12bd2653adb55ea002b39292678366c525 (patch)
tree0ad073ec8ff2ed2716adf23a679184c38df582a1 /client/Piztor/src
parent2efdc2f20f0306791ced5ec78a1acddfaf086f42 (diff)
...
Diffstat (limited to 'client/Piztor/src')
-rw-r--r--client/Piztor/src/com/macaroon/piztor/GPSTracker.java241
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Infomation.java30
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Login.java106
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Main.java205
-rw-r--r--client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java10
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Req.java14
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ReqLocation.java14
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ReqLogin.java16
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ReqUpdate.java16
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Res.java11
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ResLocation.java18
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ResLogin.java15
-rw-r--r--client/Piztor/src/com/macaroon/piztor/ResUpdate.java13
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Rlocation.java13
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Setting.java22
-rw-r--r--client/Piztor/src/com/macaroon/piztor/SocketClient.java107
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Tracker.java66
-rw-r--r--client/Piztor/src/com/macaroon/piztor/Transam.java139
18 files changed, 1056 insertions, 0 deletions
diff --git a/client/Piztor/src/com/macaroon/piztor/GPSTracker.java b/client/Piztor/src/com/macaroon/piztor/GPSTracker.java
new file mode 100644
index 0000000..7e89d21
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/GPSTracker.java
@@ -0,0 +1,241 @@
+package com.macaroon.piztor;
+
+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.location.GpsStatus;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.provider.Settings;
+import android.util.Log;
+
+public class GPSTracker extends Service implements LocationListener, GpsStatus.Listener {
+
+ 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 = 1000 * 3; // 10 seconds
+
+ // Declaring a Location Manager
+ protected LocationManager locationManager;
+
+ // for GPS satellite status listener
+ Location mLastLocation;
+ long mLastLocationMillis;
+ boolean isGPSFix;
+
+
+ public GPSTracker(Context context) {
+ this.mContext = context;
+ isGPSFix = false;
+ getLocation();
+ }
+
+ public Location getLocation() {
+ try {
+ Log.d("getLocation", "Start getting location......");
+
+ 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) {
+ // 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 Updated");
+
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+
+ Log.d("Network", "Received Network Data");
+ System.out.println("***From Network: "+latitude + " " + longitude);
+ }
+ }
+ }// end of network section
+ // if GPS Enabled get lat/long using GPS Services
+ if (isGPSEnabled) {
+ if (true) {
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER,
+ MIN_TIME_BW_UPDATES,
+ MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+ Log.d("GPS", "GPS Updated");
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.GPS_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+
+ Log.d("GPS", "Received GPS Data");
+ System.out.println("***From GPS: "+latitude + " " + longitude);
+
+ }
+ }
+ }
+ }// end of GPS section
+ }// end of fetching data
+ return location;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * 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;
+ }
+
+ /**
+ * Function to get longitude
+ * */
+ public double getLongitude() {
+ if (location != null) {
+ longitude = location.getLongitude();
+ }
+ return longitude;
+ }
+
+ /**
+ * Function to check GPS/wifi enabled
+ *
+ * @return boolean
+ * */
+ public boolean canGetLocation() {
+ return this.canGetLocation;
+ }
+
+ public boolean isGPSFix() {
+ return (this.isGPSFix && location != null);
+ }
+
+ /**
+ * 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) {
+ if (location == null) return;
+ mLastLocationMillis = SystemClock.elapsedRealtime();
+ mLastLocation = 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;
+ }
+
+ @Override
+ public void onGpsStatusChanged(int event) {
+ switch (event) {
+ case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
+ if(mLastLocation != null)
+ isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000;
+ break;
+
+ case GpsStatus.GPS_EVENT_FIRST_FIX:
+ isGPSFix = true;
+ break;
+ }
+ }
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Infomation.java b/client/Piztor/src/com/macaroon/piztor/Infomation.java
new file mode 100644
index 0000000..d989280
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Infomation.java
@@ -0,0 +1,30 @@
+package com.macaroon.piztor;
+
+import android.annotation.SuppressLint;
+import java.util.HashMap;
+import java.util.Vector;
+
+public class Infomation {
+ static String ip = "69.85.86.42";
+ static int port = 9990;
+ static int token = -1;
+ static int myId = -1;
+ static int myGroup = -1;
+ class UserInfo {
+ int id;
+ double lat, lot;
+ }
+
+ class Group {
+ int id;
+ Vector<UserInfo> v;
+ }
+
+ static HashMap<Integer, Group> mp;
+
+ @SuppressLint("UseSparseArrays")
+ static void init() {
+ mp = new HashMap<Integer, Group>();
+ }
+
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Login.java b/client/Piztor/src/com/macaroon/piztor/Login.java
new file mode 100644
index 0000000..a92b9c7
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Login.java
@@ -0,0 +1,106 @@
+package com.macaroon.piztor;
+
+import android.annotation.SuppressLint;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.Menu;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+
+public class Login extends PiztorAct {
+
+
+ ActMgr actMgr;
+ Button btnLogin;
+ EditText edtUser, edtPass;
+
+ int loginButtonClick = 1, retryButtonClick = 2, loginFailed = 3;
+
+ @SuppressLint("HandlerLeak")
+ Handler hand = new Handler() {
+ @Override
+ public void handleMessage(Message m) {
+ System.out.println(m.what);
+ if (m.what == 0) {
+ ResLogin res = (ResLogin) m.obj;
+ Infomation.token = res.t;
+ actMgr.trigger(AppMgr.loginSuccess);
+ } else if (m.what == 101) {
+ actMgr.trigger(loginFailed);
+ }
+ }
+ };
+
+ class StartStatus extends ActStatus {
+
+ @Override
+ void enter(int e) {
+ }
+
+ @Override
+ void leave(int e) {
+ }
+ }
+
+ class LoginStatus extends ActStatus {
+
+ @Override
+ void enter(int e) {
+ String user = edtUser.getText().toString();
+ String pass = edtPass.getText().toString();
+ long nowtime = System.currentTimeMillis();
+ System.out.println(user + " : " + pass + "\n");
+ AppMgr.transam.send(new ReqLogin(user, pass, nowtime, 1000));
+ }
+
+ @Override
+ void leave(int e) {
+ //TODO log out failed!
+ }
+
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ id = "login";
+ super.onCreate(savedInstanceState);
+ ActStatus[] r = new ActStatus[2];
+ AppMgr.transam.setHandler(hand);
+ r[0] = new StartStatus();
+ r[1] = new LoginStatus();
+ actMgr = new ActMgr(this, r[0], r);
+ actMgr.add(r[0], loginButtonClick, r[1]);
+ actMgr.add(r[1], loginFailed, r[0]);
+ setContentView(R.layout.activity_login);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ btnLogin = (Button) findViewById(R.id.login_btn_login);
+ edtUser = (EditText) findViewById(R.id.user_id);
+ edtPass = (EditText) findViewById(R.id.user_pass);
+ btnLogin.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ actMgr.trigger(loginButtonClick);
+ }
+ });
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.login, menu);
+ return true;
+ }
+
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java
new file mode 100644
index 0000000..d111711
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Main.java
@@ -0,0 +1,205 @@
+package com.macaroon.piztor;
+
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.Vector;
+
+import android.annotation.SuppressLint;
+import android.location.Location;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.Menu;
+import android.view.View;
+import android.widget.ImageButton;
+
+public class Main extends PiztorAct {
+ final static int SearchButtonPress = 1;
+ final static int FetchButtonPress = 2;
+ final static int FocuseButtonPress = 3;
+ final static int SuccessFetch = 4;
+ final static int FailedFetch = 5;
+ final static int TimerFlush = 6;
+ ActMgr actMgr;
+ ImageButton btnSearch, btnFetch, btnFocus, btnSettings;
+ Timer autodate;
+ @SuppressLint("HandlerLeak")
+ Handler fromGPS = new Handler() {
+ @Override
+ public void handleMessage(Message m) {
+ if (m.what != 0) {
+ Location l = (Location) m.obj;
+ if (l == null)
+ System.out.println("fuck!!!");
+ else {
+ ReqUpdate r = new ReqUpdate(Infomation.token,
+ l.getLatitude(), l.getLongitude(),
+ System.currentTimeMillis(), 1000);
+ AppMgr.transam.send(r);
+ }
+ }
+ }
+ };
+
+ Handler fromTransam = new Handler() {
+ @Override
+ public void handleMessage(Message m) {
+ switch (m.what) {
+ case 3:
+ ResLocation location = (ResLocation) m.obj;
+ for (int i = 0; i < location.n; i++) {
+ System.out.println(location.l.get(i).lat + " "
+ + location.l.get(i).lot);
+ }
+ actMgr.trigger(SuccessFetch);
+ break;
+ case 2:
+ ResUpdate update = (ResUpdate) m.obj;
+ if (update.t == 0)
+ System.out.println("update success");
+ else
+ System.out.println("update failed");
+ break;
+ default:
+ break;
+ }
+
+ }
+ };
+
+ String cause(int t) {
+ switch (t) {
+ case SearchButtonPress:
+ return "Search Button Press";
+ case FetchButtonPress:
+ return "Fetch Button Press";
+ case FocuseButtonPress:
+ return "Focuse Button Press";
+ case SuccessFetch:
+ return "Success Fetch";
+ case FailedFetch:
+ return "Failed Fetch";
+ case TimerFlush:
+ return "TimerFlush";
+ default:
+ return "Fuck!!!";
+ }
+ }
+
+ class StartStatus extends ActStatus {
+
+ @Override
+ void enter(int e) {
+ System.out.println("enter start status!!!!");
+ if (e == TimerFlush) {
+ ReqLocation r = new ReqLocation(Infomation.token, 1,
+ System.currentTimeMillis(), 1000);
+ AppMgr.transam.send(r);
+ }
+ }
+
+ @Override
+ void leave(int e) {
+ System.out.println("leave start status!!!! because" + cause(e));
+ }
+
+ }
+
+ class FetchStatus extends ActStatus {
+
+ @Override
+ void enter(int e) {
+ System.out.println("enter Fetch status!!!!");
+ if (e == FetchButtonPress) {
+ ReqLocation r = new ReqLocation(Infomation.token, 1,
+ System.currentTimeMillis(), 1000);
+ AppMgr.transam.send(r);
+ }
+ }
+
+ @Override
+ void leave(int e) {
+ System.out.println("leave fetch status!!!! because" + cause(e));
+ }
+
+ }
+
+ class FocusStatus extends ActStatus {
+
+ @Override
+ void enter(int e) {
+ System.out.println("enter focus status!!!!");
+
+ }
+
+ @Override
+ void leave(int e) {
+ System.out.println("leave focus status!!!! because" + cause(e));
+
+ }
+
+ }
+
+ class AutoUpdate extends TimerTask {
+
+ @Override
+ public void run() {
+ actMgr.trigger(Main.TimerFlush);
+ }
+
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ id = "Main";
+ super.onCreate(savedInstanceState);
+ AppMgr.tracker.setHandler(fromGPS);
+ ActStatus[] r = new ActStatus[3];
+ r[0] = new StartStatus();
+ r[1] = new FetchStatus();
+ r[2] = new FocusStatus();
+ actMgr = new ActMgr(this, r[0], r);
+ actMgr.add(r[0], FocuseButtonPress, r[2]);
+ actMgr.add(r[0], FetchButtonPress, r[1]);
+ actMgr.add(r[0], SuccessFetch, r[0]);
+ actMgr.add(r[1], FetchButtonPress, r[0]);
+ actMgr.add(r[1], FailedFetch, r[0]);
+ actMgr.add(r[1], SuccessFetch, r[0]);
+ actMgr.add(r[2], FocuseButtonPress, r[0]);
+ actMgr.add(r[0], TimerFlush, r[0]);
+ actMgr.add(r[2], TimerFlush, r[2]);
+ autodate = new Timer();
+ AppMgr.transam.setHandler(fromTransam);
+ setContentView(R.layout.activity_main);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ btnFetch = (ImageButton) findViewById(R.id.footbar_btn_fetch);
+ btnFocus = (ImageButton) findViewById(R.id.footbar_btn_focus);
+ btnSearch = (ImageButton) findViewById(R.id.footbar_btn_search);
+ btnSettings = (ImageButton) findViewById(R.id.footbar_btn_settings);
+ btnFetch.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ actMgr.trigger(FetchButtonPress);
+ }
+ });
+ btnFocus.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ actMgr.trigger(FocuseButtonPress);
+ }
+ });
+ autodate.schedule(new AutoUpdate(), 0, 5000);
+ }
+
+ @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;
+ }
+
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java b/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java
new file mode 100644
index 0000000..6d1861a
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java
@@ -0,0 +1,10 @@
+package com.macaroon.piztor;
+
+class PiztorExcepiton extends Exception{
+ private static final long serialVersionUID = -7147530695009854988L;
+
+}
+
+class ClassCannotFind extends PiztorExcepiton {
+ //private class
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Req.java b/client/Piztor/src/com/macaroon/piztor/Req.java
new file mode 100644
index 0000000..32988b8
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Req.java
@@ -0,0 +1,14 @@
+package com.macaroon.piztor;
+
+public class Req{
+ int type; //request type
+ int token; //authentciation
+ long time; //current time
+ long alive; //alive time
+ Req(int t,int k,long tm,long av){
+ type = t;
+ token = k;
+ time = tm;
+ alive = av;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLocation.java b/client/Piztor/src/com/macaroon/piztor/ReqLocation.java
new file mode 100644
index 0000000..000f373
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ReqLocation.java
@@ -0,0 +1,14 @@
+package com.macaroon.piztor;
+
+//--------------------------------------//
+// Ask Location //
+//--------------------------------------//
+
+public class ReqLocation extends Req{
+ int gid; //group id;
+
+ ReqLocation(int token,int groupid,long time,long alive){
+ super(3,token,time,alive); //for type 3
+ gid = groupid;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLogin.java b/client/Piztor/src/com/macaroon/piztor/ReqLogin.java
new file mode 100644
index 0000000..294cae3
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ReqLogin.java
@@ -0,0 +1,16 @@
+package com.macaroon.piztor;
+
+//--------------------------------------//
+// authentication //
+//--------------------------------------//
+
+public class ReqLogin extends Req{
+ String user; //username
+ String pass; //password
+
+ ReqLogin(String u,String p,long time,long alive){
+ super(0,0,time,alive); //for type 0
+ user = u;
+ pass = p;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java b/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java
new file mode 100644
index 0000000..e4b1497
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java
@@ -0,0 +1,16 @@
+package com.macaroon.piztor;
+
+//--------------------------------------//
+// Update Location //
+//--------------------------------------//
+
+public class ReqUpdate extends Req{
+ double lat; //latitude
+ double lot; //longitude
+
+ ReqUpdate(int token,double latitude,double longitude,long time,long alive){
+ super(2,token,time,alive); //for type 2
+ lat = latitude;
+ lot = longitude;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/Res.java b/client/Piztor/src/com/macaroon/piztor/Res.java
new file mode 100644
index 0000000..98af108
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Res.java
@@ -0,0 +1,11 @@
+package com.macaroon.piztor;
+
+public class Res{
+ int t;
+ int s;
+ Res(int type,int status){
+ t = type;
+ s = status;
+ }
+}
+
diff --git a/client/Piztor/src/com/macaroon/piztor/ResLocation.java b/client/Piztor/src/com/macaroon/piztor/ResLocation.java
new file mode 100644
index 0000000..eb90840
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ResLocation.java
@@ -0,0 +1,18 @@
+package com.macaroon.piztor;
+
+import java.util.Vector;
+
+//--------------------------------------//
+// Location Info //
+//--------------------------------------//
+
+public class ResLocation extends Res{
+ Vector<Rlocation> l; //vector for location info
+ int n; //number of location info
+
+ ResLocation(int num,Vector<Rlocation> locationvec){
+ super(3,255); //for type 3
+ l = locationvec;
+ n = num;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/ResLogin.java b/client/Piztor/src/com/macaroon/piztor/ResLogin.java
new file mode 100644
index 0000000..5b597a4
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ResLogin.java
@@ -0,0 +1,15 @@
+package com.macaroon.piztor;
+
+
+//--------------------------------------//
+// Respond to login //
+//--------------------------------------//
+
+public class ResLogin extends Res{
+ int t; //user token
+
+ ResLogin(int token,int status){
+ super(0,status); //for type 0
+ t = token;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/ResUpdate.java b/client/Piztor/src/com/macaroon/piztor/ResUpdate.java
new file mode 100644
index 0000000..727eaa3
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/ResUpdate.java
@@ -0,0 +1,13 @@
+package com.macaroon.piztor;
+
+
+//--------------------------------------//
+// Respond to update location //
+//--------------------------------------//
+
+public class ResUpdate extends Res{
+
+ ResUpdate(int status){
+ super(2,status); //for type 2
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/Rlocation.java b/client/Piztor/src/com/macaroon/piztor/Rlocation.java
new file mode 100644
index 0000000..142cc9b
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Rlocation.java
@@ -0,0 +1,13 @@
+package com.macaroon.piztor;
+
+class Rlocation{
+ int i; //id
+ double lat; //latitude
+ double lot; //longitude
+
+ Rlocation(int id,double latitude,double longitude){
+ i = id;
+ lat = latitude;
+ lot = longitude;
+ }
+} \ No newline at end of file
diff --git a/client/Piztor/src/com/macaroon/piztor/Setting.java b/client/Piztor/src/com/macaroon/piztor/Setting.java
new file mode 100644
index 0000000..610333f
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Setting.java
@@ -0,0 +1,22 @@
+package com.macaroon.piztor;
+
+import android.os.Bundle;
+import android.app.Activity;
+import android.view.Menu;
+
+public class Setting extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_setting);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.setting, menu);
+ return true;
+ }
+
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/SocketClient.java b/client/Piztor/src/com/macaroon/piztor/SocketClient.java
new file mode 100644
index 0000000..18c19da
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/SocketClient.java
@@ -0,0 +1,107 @@
+package com.macaroon.piztor;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.Vector;
+
+import android.os.Handler;
+import android.os.Message;
+
+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 void sendMsg(Req req,Handler recall) throws IOException {
+ try {
+ DataOutputStream out = new DataOutputStream(
+ client.getOutputStream());
+ int tmp = req.type;
+ out.writeByte(tmp);
+ switch (tmp) {
+ case 0:
+ ReqLogin rau = (ReqLogin) req;
+ String id = rau.user;
+ String pa = rau.pass;
+ out.writeBytes(id + "\0" + pa);
+ break;
+ case 2:
+ ReqUpdate rup = (ReqUpdate) req;
+ int tk2 = rup.token;
+ double slat = rup.lat;
+ double slot = rup.lot;
+ out.writeInt(tk2);
+ out.writeDouble(slat);
+ out.writeDouble(slot);
+ break;
+ case 3:
+ ReqLocation ras = (ReqLocation) req;
+ int tk3 = ras.token;
+ int gid = ras.gid;
+ out.writeInt(tk3);
+ out.writeInt(gid);
+ break;
+ }
+ out.flush();
+ client.shutdownOutput();
+ DataInputStream in = new DataInputStream(client.getInputStream());
+ Message msg = new Message();
+ int type = in.readUnsignedByte();
+ switch (type) {
+ case 0:
+ int id = in.readInt();
+ int status = in.readUnsignedByte();
+ ResLogin rchklogin = new ResLogin(id,status);
+ msg.obj = rchklogin;
+ msg.what = 0;
+ recall.sendMessage(msg);
+ break;
+ case 2:
+ int status1 = in.readUnsignedByte();
+ ResUpdate rchkupd = new ResUpdate(status1);
+ msg.obj = rchkupd;
+ msg.what = 1;
+ recall.sendMessage(msg);
+ break;
+ case 3:
+ int n = in.readInt();
+ Vector<Rlocation> tmpv = new Vector<Rlocation>();
+ for (int i = 1; i <= n; i++) {
+ int tid = in.readInt();
+ double lat = in.readDouble();
+ double lot = in.readDouble();
+ tmpv.add(new Rlocation(tid,lat,lot));
+ }
+ ResLocation rlocin = new ResLocation(n,tmpv);
+ msg.obj = rlocin;
+ msg.what = 3;
+ recall.sendMessage(msg);
+ break;
+ }
+
+ } catch (IOException e) {
+ throw e;
+ }
+ }
+
+ public void closeSocket() {
+ try {
+ client.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Tracker.java b/client/Piztor/src/com/macaroon/piztor/Tracker.java
new file mode 100644
index 0000000..db9c151
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Tracker.java
@@ -0,0 +1,66 @@
+package com.macaroon.piztor;
+
+import android.content.Context;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import android.location.Location;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+
+public class Tracker implements Runnable {
+
+ private static final long TIME_DELTA = 1000 * 3; // 3 second
+ public Timer timer;
+ private final Context mContext;
+ GPSTracker myTracker;
+ Handler mHandler;
+ Message message;
+
+ public Tracker(Context context, Handler yHandler) {
+ timer = new Timer();
+ mContext = context;
+ myTracker = new GPSTracker(mContext);
+ mHandler = yHandler;
+ }
+
+ void setHandler(Handler hand) {
+ mHandler = hand;
+ }
+
+
+ public void run() {
+ GPSTask myTask = new GPSTask();
+ timer.schedule(myTask, 0, TIME_DELTA);
+ }
+
+ class GPSTask extends TimerTask {
+ @Override
+ public void run() {
+ Location location = myTracker.getLocation();
+ Log.d("Location", "Fetching location.....");
+ if (myTracker.canGetLocation()) {
+
+// Log.d("TTTTTTTTTTTTTTTTTTTTTTTime","TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTime");
+// System.out.println("GPSTIME" + myTracker.location.getTime());
+// System.out.println("SYSTIME" + SystemClock.elapsedRealtime());
+
+ message = new Message();
+ message.what = 0;
+ message.obj = location;
+ if(myTracker.isGPSFix()) {
+ message.what = 1;
+ } else {
+ message.what = 2;
+ }
+ mHandler.sendMessage(message);
+ } else {
+ message = new Message();
+ message.what = 0;
+ mHandler.sendMessage(message);
+ }
+ }
+ }
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/Transam.java b/client/Piztor/src/com/macaroon/piztor/Transam.java
new file mode 100644
index 0000000..3410502
--- /dev/null
+++ b/client/Piztor/src/com/macaroon/piztor/Transam.java
@@ -0,0 +1,139 @@
+package com.macaroon.piztor;
+
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.util.LinkedList;
+import java.util.Queue;
+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 Timer mtimer;
+ public boolean running = false;
+ public boolean flag = true;
+ public int cnt = 4;
+ Res res;
+ Req req;
+ public int p; // port
+ public String i; // ip
+ Thread thread;
+ Handler core;
+ Handler recall; // recall
+ Queue<Req> reqtask; // request task
+
+ Transam(String ip, int port, Handler Recall) {
+ p = port;
+ i = ip;
+ recall = Recall;
+ reqtask = new LinkedList<Req>();
+ }
+
+ public void send(Req r) {
+ reqtask.offer(r);
+
+ }
+
+ public void setHandler(Handler Recall) {
+ recall = Recall;
+ reqtask.clear();
+ }
+
+ public void run() { // start the main timer
+ // TimerTask tmain = new Timertk();
+ // mtimer = new Timer();
+ // mtimer.schedule(tmain, 100, 100); //check the queue for every 100
+ // msec
+
+ while (true) {
+ if (running == false) {
+
+ if (!reqtask.isEmpty()) { // poll the head request
+ req = reqtask.poll();
+ if (req.time + req.alive < System.currentTimeMillis()) { // time
+ // out!
+ Message ret = new Message();
+ ret.obj = "Time out!";
+ ret.what = 100;
+ recall.sendMessage(ret);
+ } else { // run the request
+ final thd t = new thd();
+ flag = false;
+ thread = new Thread(t);
+ cnt = 4;
+ running = true;
+ thread.start();
+ timer = new Timer();
+ TimerTask task = new Timertk();
+ timer.schedule(task, 2000, 2000);
+ }
+ }
+ }
+ }
+ }
+
+ class tmain extends TimerTask {
+ public void run() {
+
+ }
+ };
+
+ class thd implements Runnable {
+ public void run() {
+ try {
+ SocketClient client = new SocketClient(i, p);
+ client.sendMsg(req, recall);
+ Message msg = new Message();
+ msg.what = 1;
+ handler.sendMessage(msg);
+ client.closeSocket();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ System.out.println("UnknownHostException");
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("IOException");
+ }
+
+ }
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case 1:
+ flag = true;
+ break;
+ case 2:
+ 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 = 101;
+ recall.sendMessage(msg);
+ timer.cancel();
+ } else if (flag == true) {
+ timer.cancel();
+ running = false;
+ }
+ }
+ };
+} \ No newline at end of file