From 0e687f12bd2653adb55ea002b39292678366c525 Mon Sep 17 00:00:00 2001 From: goblin911 Date: Sun, 25 Aug 2013 21:18:19 +0800 Subject: ... --- .../Piztor/src/com/macaroon/piztor/GPSTracker.java | 241 +++++++++++++++++++++ .../Piztor/src/com/macaroon/piztor/Infomation.java | 30 +++ client/Piztor/src/com/macaroon/piztor/Login.java | 106 +++++++++ client/Piztor/src/com/macaroon/piztor/Main.java | 205 ++++++++++++++++++ .../src/com/macaroon/piztor/PiztorExcepiton.java | 10 + client/Piztor/src/com/macaroon/piztor/Req.java | 14 ++ .../src/com/macaroon/piztor/ReqLocation.java | 14 ++ .../Piztor/src/com/macaroon/piztor/ReqLogin.java | 16 ++ .../Piztor/src/com/macaroon/piztor/ReqUpdate.java | 16 ++ client/Piztor/src/com/macaroon/piztor/Res.java | 11 + .../src/com/macaroon/piztor/ResLocation.java | 18 ++ .../Piztor/src/com/macaroon/piztor/ResLogin.java | 15 ++ .../Piztor/src/com/macaroon/piztor/ResUpdate.java | 13 ++ .../Piztor/src/com/macaroon/piztor/Rlocation.java | 13 ++ client/Piztor/src/com/macaroon/piztor/Setting.java | 22 ++ .../src/com/macaroon/piztor/SocketClient.java | 107 +++++++++ client/Piztor/src/com/macaroon/piztor/Tracker.java | 66 ++++++ client/Piztor/src/com/macaroon/piztor/Transam.java | 139 ++++++++++++ 18 files changed, 1056 insertions(+) create mode 100644 client/Piztor/src/com/macaroon/piztor/GPSTracker.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Infomation.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Login.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Main.java create mode 100644 client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Req.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ReqLocation.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ReqLogin.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ReqUpdate.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Res.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ResLocation.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ResLogin.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ResUpdate.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Rlocation.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Setting.java create mode 100644 client/Piztor/src/com/macaroon/piztor/SocketClient.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Tracker.java create mode 100644 client/Piztor/src/com/macaroon/piztor/Transam.java (limited to 'client/Piztor/src/com') 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 v; + } + + static HashMap mp; + + @SuppressLint("UseSparseArrays") + static void init() { + mp = new HashMap(); + } + +} 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 l; //vector for location info + int n; //number of location info + + ResLocation(int num,Vector 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 tmpv = new Vector(); + 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 reqtask; // request task + + Transam(String ip, int port, Handler Recall) { + p = port; + i = ip; + recall = Recall; + reqtask = new LinkedList(); + } + + 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 -- cgit v1.2.3-70-g09d2