diff options
author | Teddy <[email protected]> | 2013-08-30 22:48:29 +0800 |
---|---|---|
committer | Teddy <[email protected]> | 2013-08-30 22:48:29 +0800 |
commit | 29b6f83eca288a1bdc2b5cfcbbd1ae2651b97ae6 (patch) | |
tree | 173a519dbb893170aa4856a727205f0d73b8b2fd /client/Piztor/src | |
parent | 3054e381a1d384dee4206bfe5646f057bf82446e (diff) | |
parent | 1cc2c0f8319df86602da0ae1eed6456d4ff3b172 (diff) |
Merge branch 'master' of github.com:Determinant/piztor
Diffstat (limited to 'client/Piztor/src')
38 files changed, 1012 insertions, 920 deletions
diff --git a/client/Piztor/src/com/macaroon/piztor/AlertMaker.java b/client/Piztor/src/com/macaroon/piztor/AlertMaker.java index 839813a..cc70e62 100644 --- a/client/Piztor/src/com/macaroon/piztor/AlertMaker.java +++ b/client/Piztor/src/com/macaroon/piztor/AlertMaker.java @@ -96,7 +96,7 @@ public class AlertMaker { mapMaker.DrawMarker(markerPoint); else { Toast toast = Toast.makeText(context, - "Too early!Give me more time!", Toast.LENGTH_LONG); + "Too early! Give me at least 2 minutes!", Toast.LENGTH_LONG); toast.show(); closeBoard(context); showMarkerAlert(markerPoint); @@ -108,26 +108,4 @@ public class AlertMaker { markerDialog.show(); } - public void showQuitAlert() { - - AlertDialog.Builder quitDialog = new AlertDialog.Builder(context); - closeBoard(context); - quitDialog.setTitle("Quit"); - quitDialog.setMessage("Do you want to logout and quit?"); - quitDialog.setPositiveButton("Quit", - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - AppMgr.exit(); - } - }); - quitDialog.setNegativeButton("Cancel", - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - closeBoard(context); - } - }); - quitDialog.show(); - } - } diff --git a/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/client/Piztor/src/com/macaroon/piztor/AppMgr.java index e322745..933d2db 100644 --- a/client/Piztor/src/com/macaroon/piztor/AppMgr.java +++ b/client/Piztor/src/com/macaroon/piztor/AppMgr.java @@ -68,21 +68,15 @@ public class AppMgr { static void trigger(int event) { Intent i = new Intent(); - System.out.println(nowAct.id + " : " + event); - if (mp.get(nowAct.getClass()) == null) - System.out.println("first"); - else if (mp.get(nowAct.getClass()) == null) - System.out.println("second"); i.setClass(nowAct, mp.get(nowAct.getClass()).get(event)); if (event == errorToken) Infomation.token = null; if (event == loginSuccess) { mBMapManager.start(); - transam.startPush(Infomation.token, Infomation.username); + mapInfo.clear(); } if (event == logout) { mBMapManager.stop(); - transam.stopPush(); } nowAct.startActivity(i); } diff --git a/client/Piztor/src/com/macaroon/piztor/Convert.java b/client/Piztor/src/com/macaroon/piztor/Convert.java new file mode 100644 index 0000000..af7359c --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Convert.java @@ -0,0 +1,63 @@ +package com.macaroon.piztor;
+
+import android.annotation.SuppressLint;
+
+public class Convert {
+
+ @SuppressLint("DefaultLocale")
+ public static byte[] hexStringToBytes(String hexString) {
+ if (hexString == null || hexString.equals("")) {
+ return null;
+ }
+ hexString = hexString.toUpperCase();
+ int length = hexString.length() / 2;
+ char[] hexChars = hexString.toCharArray();
+ byte[] d = new byte[length];
+ for (int i = 0; i < length; i++) {
+ int pos = i * 2;
+ d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+ }
+ return d;
+ }
+
+ public static byte charToByte(char c) {
+ return (byte) "0123456789ABCDEF".indexOf(c);
+ }
+
+ public static byte[] intToBytes(int i) {
+ byte[] d = new byte[4];
+ d[0] = (byte)((i >> 24) & 0xFF);
+ d[1] = (byte)((i >> 16) & 0xFF);
+ d[2] = (byte)((i >> 8) & 0xFF);
+ d[3] = (byte)(i & 0xFF);
+ return d;
+ }
+
+ public static byte[] doubleToBytes(double d){
+ byte[] b=new byte[8];
+ long l=Double.doubleToLongBits(d);
+ for(int i=0;i<8;i++){
+ b[i] = (byte)(l >>> 8*(7-i));
+ }
+ return b;
+ }
+
+ public static void write(byte[] s,byte[] w,int l) {
+
+ for(int i=0;i<w.length;i++){
+ s[i+l] = w[i];
+ }
+ }
+
+ public static String byteToHexString(byte[] buffer){
+ String p ="";
+ for (int i = 0; i < buffer.length; i++) {
+ String hex = Integer.toHexString(buffer[i] & 0xFF);
+ if (hex.length() == 1) {
+ hex = '0' + hex;
+ }
+ p += hex;
+ }
+ return p;
+ }
+}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/EException.java b/client/Piztor/src/com/macaroon/piztor/EException.java new file mode 100644 index 0000000..5ce1fdb --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/EException.java @@ -0,0 +1,75 @@ +package com.macaroon.piztor;
+
+
+
+public class EException extends Exception {
+
+ static final int EConnectedFailedException =101;
+ static final int ETimeOutException =102;
+ static final int EJavaHostException =103;
+ static final int EPushFailedException =104;
+ static final int EIOException =105;
+ static final int EUnknownHostException =106;
+ static final int EStatusFailedException =107;
+
+
+ private static final long serialVersionUID = 100L;
+ int Rtype;
+ int Etype;
+ long time;
+ public EException(int e,int r,long timep) {
+ super();
+ Rtype = r;
+ Etype = e;
+ time = timep;
+ }
+ }
+
+ class EConnectFailedException extends EException{
+ private static final long serialVersionUID = 101L;
+ public EConnectFailedException(int t,long timep) {
+ super(101,t,timep);
+ }
+ }
+
+ class ETimeOutException extends EException{
+ private static final long serialVersionUID = 102L;
+ public ETimeOutException(int t,long timep) {
+ super(102,t,timep);
+ }
+ }
+
+ class EJavaHostException extends EException{
+ private static final long serialVersionUID = 103L;
+ public EJavaHostException(int t,long timep) {
+ super(103,t,timep);
+ }
+ }
+
+ class EPushFailedException extends EException{
+ private static final long serialVersionUID = 104L;
+ public EPushFailedException(int t,long timep) {
+ super(104,t,timep);
+ }
+ }
+
+ class EIOException extends EException{
+ private static final long serialVersionUID = 105L;
+ public EIOException(int t,long timep) {
+ super(105,t,timep);
+ }
+ }
+
+ class EUnknownHostException extends EException{
+ private static final long serialVersionUID = 106L;
+ public EUnknownHostException(int t,long timep) {
+ super(106,t,timep);
+ }
+ }
+
+ class EStatusFailedException extends EException{
+ private static final long serialVersionUID = 107L;
+ public EStatusFailedException(int t,long timep) {
+ super(107,t,timep);
+ }
+ }
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Infomation.java b/client/Piztor/src/com/macaroon/piztor/Infomation.java index 603819e..60eb03f 100644 --- a/client/Piztor/src/com/macaroon/piztor/Infomation.java +++ b/client/Piztor/src/com/macaroon/piztor/Infomation.java @@ -1,11 +1,15 @@ package com.macaroon.piztor; +import java.util.Vector; + public class Infomation { - static String ip = "192.168.1.171"; + static String ip = "202.120.7.4"; + //static String ip = "192.168.1.171"; // static String ip = "69.85.86.42"; // static String ip = "192.168.1.101"; - static int port = 2222; + static int port = 2223; static String token = null; static String username = null; static UserInfo myInfo; + static Vector<RGroup> sublist; } diff --git a/client/Piztor/src/com/macaroon/piztor/InitAct.java b/client/Piztor/src/com/macaroon/piztor/InitAct.java index 272afe7..8145935 100644 --- a/client/Piztor/src/com/macaroon/piztor/InitAct.java +++ b/client/Piztor/src/com/macaroon/piztor/InitAct.java @@ -2,23 +2,16 @@ package com.macaroon.piztor; import android.os.Bundle; import android.view.Menu; -import android.content.Context; public class InitAct extends PiztorAct { - private CopyMap copyMap; - private String assetDir; - private String dir; - @Override protected void onCreate(Bundle savedInstanceState) { id = "initAct"; super.onCreate(savedInstanceState); - setContentView(R.layout.activity_init); - copyMap = new CopyMap(); - copyMap.testCopy(InitAct.this); AppMgr.init(getApplicationContext()); AppMgr.transam.setTimeOutTime(5000); + setContentView(R.layout.activity_init); } @Override diff --git a/client/Piztor/src/com/macaroon/piztor/LogInfo.java b/client/Piztor/src/com/macaroon/piztor/LogInfo.java new file mode 100644 index 0000000..2fd93ac --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/LogInfo.java @@ -0,0 +1,12 @@ +package com.macaroon.piztor; + +public class LogInfo { + static String login = "login"; + static String logout = "logout"; + static String update = "update"; + static String resquest = "resquest"; + static String push = "push"; + static String exception = "exception"; + static String s = "successfull"; + static String f = "failed"; +} diff --git a/client/Piztor/src/com/macaroon/piztor/Login.java b/client/Piztor/src/com/macaroon/piztor/Login.java index a1a6d0d..533eeac 100644 --- a/client/Piztor/src/com/macaroon/piztor/Login.java +++ b/client/Piztor/src/com/macaroon/piztor/Login.java @@ -4,6 +4,7 @@ import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.View; @@ -30,20 +31,19 @@ public class Login extends PiztorAct { } if (m.what == 0) { ResLogin res = (ResLogin) m.obj; - if (res.status == 1) { - actMgr.trigger(loginFailed); - return; - } + Log.d(LogInfo.login, LogInfo.s); Infomation.token = res.t; - Infomation.myInfo.uid = res.uid; - Infomation.username = edtUser.getText().toString(); - System.out.println(res.status + " :!!! " + res.type); + Infomation.sublist = res.sublist; + Infomation.username = res.uinfo.username; + Infomation.myInfo = new UserInfo(res.uinfo.uid); + Infomation.myInfo.setInfo(res.uinfo.gid.company, + res.uinfo.gid.section, res.uinfo.sex, + res.uinfo.nickname); + System.out.println("login !!!!" + res.sublist.size()); actMgr.trigger(AppMgr.loginSuccess); - System.out.println("............"); } else { - System.out.println("reveive other info ~~~~~~~~~~~~~~" + m.what); -// System.out.println("login de " + m.what); -// actMgr.trigger(loginFailed); + System.out.println("login handler reveive other info : " + + m.what); } } }; @@ -113,7 +113,10 @@ public class Login extends PiztorAct { @Override protected void onResume() { super.onResume(); - AppMgr.transam.setHandler(handler); + if (AppMgr.transam == null) + Log.d(LogInfo.exception, "transam = null"); + AppMgr.transam.setHandler(handler); + } @Override diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java index 1e46003..623595b 100644 --- a/client/Piztor/src/com/macaroon/piztor/Main.java +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -1,8 +1,6 @@ package com.macaroon.piztor; import java.util.Calendar; -import java.util.Timer; -import java.util.TimerTask; import java.util.Vector; import android.annotation.SuppressLint; @@ -39,14 +37,13 @@ public class Main extends PiztorAct { final static int FailedFetch = 5; final static int mapViewtouched = 7; - MapMaker mapMaker = null; MapView mMapView; AlertMaker alertMaker; private Calendar calendar; GeoPoint markerPoint = null; private MKMapTouchListener mapTouchListener; - + /** * Locating component */ @@ -56,100 +53,67 @@ public class Main extends PiztorAct { LocationData locData = null; public MyLocationListener myListener = new MyLocationListener(); boolean isFirstLocation = true; + public static int GPSrefreshrate = 5; ImageButton btnSearch, btnFetch, btnFocus, btnSettings; MapInfo mapInfo; + Transam transam; @SuppressLint("HandlerLeak") Handler handler = new Handler() { @Override public void handleMessage(Message m) { switch (m.what) { - case 1:// 上传自己信息成功or失败 - ResUpdate update = (ResUpdate) m.obj; - if (update.status == 0) - System.out.println("update success"); - else { - System.out.println("update failed"); - actMgr.trigger(AppMgr.errorToken); - } + case Res.Login:// 上传自己信息成功or失败 + Log.d("update location", "successfull"); break; - case 2:// 得到别人的信息 - ResLocation location = (ResLocation) m.obj; - if (location.status == 0) { - mapInfo.clear(); - for (RLocation i : location.l) { - System.out.println(i.id + " : " + i.latitude + " " - + i.longitude); - UserInfo info = new UserInfo(i.id); - info.setLocation(i.latitude, i.longitude); - mapInfo.addUserInfo(info); - } -// actMgr.trigger(SuccessFetch); - flushMap(); - } else { - System.out.println("resquest for location failed!"); - actMgr.trigger(AppMgr.errorToken); - } - break; - case 3:// 得到用户信息 - ResUserInfo r = (ResUserInfo) m.obj; - if (r.status == 0) { - System.out.println("id : " + r.uid + " sex : " + r.sex - + " group : " + r.section); - if (r.uid == Infomation.myInfo.uid) { - System.out.println("flush myself info!!!"); - Infomation.myInfo.section = r.section; - Infomation.myInfo.company = r.company; - Infomation.myInfo.sex = r.sex; + case Res.UserInfo:// 得到用户信息 + ResUserInfo userInfo = (ResUserInfo) m.obj; + System.out.println("revieve ........" + userInfo.uinfo.size()); + Vector<RUserInfo> uinfo = userInfo.uinfo; + for (RUserInfo info : uinfo) { + System.out.println(info.latitude + " " + + info.longitude); + UserInfo r = mapInfo.getUserInfo(info.uid); + if (r != null) { + r.setInfo(info.gid.company, info.gid.section, info.sex, + info.nickname); + r.setLocation(info.latitude, info.longitude); } else { - UserInfo user = mapInfo.getUserInfo(r.uid); - if (user != null) - user.setInfo(r.company, r.section, r.sex); - else - System.out.println("fuck!!!!"); + r = new UserInfo(info.uid); + r.setInfo(info.gid.company, info.gid.section, info.sex, + info.nickname); + r.setLocation(info.latitude, info.longitude); + mapInfo.addUserInfo(r); } - flushMap(); - } else { - System.out.println("reqest for userInfo must be wrong!!!"); - actMgr.trigger(AppMgr.errorToken); - } - break; - case 4:// 登出 - ResLogout logout = (ResLogout) m.obj; - if (logout.status == 0) { - actMgr.trigger(AppMgr.logout); - } else { - Toast toast = Toast.makeText(getApplicationContext(), - "logout failed", Toast.LENGTH_LONG); - toast.show(); } + System.out.println("now has info number : " + mapInfo.allUsers.size()); + flushMap(); break; - case Transam.StartPush: - ResStartPush startpush = (ResStartPush) m.obj; - if (startpush.status == 1) { - System.out.println("!!!!!!!!!!!!!jian gui le!!!!!!!!!!!!!"); - } + case Res.Logout:// 登出 + actMgr.trigger(AppMgr.logout); break; - case Transam.PushMessage: + case Res.PushMessage: ResPushMessage pushMessage = (ResPushMessage) m.obj; receiveMessage(pushMessage.message); break; - case Transam.SendMessage: - ResSendMessage resMessage = (ResSendMessage) m.obj; - System.out.println("res message " + resMessage.status); + case Res.SendMessage: + Log.d(LogInfo.resquest, "send message successfully"); break; - case Transam.PushLocation: + case Res.PushLocation: ResPushLocation pushLocation = (ResPushLocation) m.obj; - upDateInfo(pushLocation.l); + upMapInfo(pushLocation.l); + flushMap(); break; + case -1: + actMgr.trigger(AppMgr.logout); default: break; } } - void upDateInfo(Vector<RLocation> l) { - // TODO + void upMapInfo(Vector<RLocation> l) { + System.out.println("hahaha" + " " + l.size()); for (RLocation i : l) { UserInfo info = AppMgr.mapInfo.getUserInfo(i.id); if (info != null) { @@ -184,18 +148,16 @@ public class Main extends PiztorAct { if (mapMaker != null) mapMaker.UpdateMap(AppMgr.mapInfo); else - System.out - .println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + Log.d("exception", "!!!"); } - + void receiveMessage(String msg) { System.out.println("receiveed push message!!!!!"); System.out.println(msg); - Toast toast = Toast.makeText(getApplicationContext(), - msg, Toast.LENGTH_LONG); + Toast toast = Toast.makeText(getApplicationContext(), msg, + Toast.LENGTH_LONG); toast.show(); } - public class MyLocationListener implements BDLocationListener { int cnt = 0; @@ -229,7 +191,17 @@ public class Main extends PiztorAct { hasAnimation = true; isFirstLocation = false; } + int TMP = location.getLocType(); + if (TMP == 61) Toast.makeText(Main.this, "Piztor : Update from GPS result (" + GPSrefreshrate + "s)", 3000).show(); + if (TMP == 161) Toast.makeText(Main.this, "Piztor : Update from Network (" + GPSrefreshrate + "s)" , 3000).show(); + if (TMP == 65) Toast.makeText(Main.this, "Piztor : Update from Cache (" + GPSrefreshrate + "s)", 3000).show(); mapMaker.UpdateLocationOverlay(locData, hasAnimation); + + LocationClientOption option = new LocationClientOption(); + option.setOpenGps(true); + option.setCoorType("bd09ll"); + option.setScanSpan(GPSrefreshrate * 1000); + mLocClient.setLocOption(option); } @Override @@ -248,9 +220,6 @@ public class Main extends PiztorAct { if (e == ActMgr.Create) { System.out.println(Infomation.token + " " + Infomation.username + " " + Infomation.myInfo.uid); - AppMgr.transam.send(new ReqUserInfo(Infomation.token, - Infomation.username, Infomation.myInfo.uid, System - .currentTimeMillis(), 5000)); } if (e == SuccessFetch) flushMap(); @@ -263,74 +232,76 @@ public class Main extends PiztorAct { } - - void requesLocation(int company, int section) { - ReqLocation r = new ReqLocation(Infomation.token, Infomation.username, - company, section, System.currentTimeMillis(), 2000); - AppMgr.transam - .send(new ReqSendMessage(Infomation.token, Infomation.username, - "hahaha", System.currentTimeMillis(), 5000)); + void requestUserInfo() { + for (RGroup i : Infomation.sublist) { + ReqUserInfo r = new ReqUserInfo(Infomation.token, + Infomation.username, i, System.currentTimeMillis(), 2000); + transam.send(r); + } System.out.println("get others infomation!!!"); - AppMgr.transam.send(r); } void focusOn() { mapMaker.mMapController.animateTo(Infomation.myInfo.location); } - + public void InitTouchListenr() { mapTouchListener = new MKMapTouchListener() { - + @Override public void onMapLongClick(GeoPoint arg0) { closeBoard(Main.this); alertMaker.showMarkerAlert(arg0); } - + @Override public void onMapDoubleClick(GeoPoint arg0) { // TODO Auto-generated method stub - + } - + @Override public void onMapClick(GeoPoint arg0) { // TODO Auto-generated method stub - + } }; mMapView.regMapTouchListner(mapTouchListener); } - + @Override protected void onCreate(Bundle savedInstanceState) { id = "Main"; super.onCreate(savedInstanceState); - - locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE); - isGPSEnabled = locationManager.isProviderEnabled(locationManager.GPS_PROVIDER); - + + locationManager = (LocationManager) this + .getSystemService(LOCATION_SERVICE); + isGPSEnabled = locationManager + .isProviderEnabled(locationManager.GPS_PROVIDER); + transam = AppMgr.transam; mapInfo = AppMgr.mapInfo; ActStatus[] r = new ActStatus[1]; ActStatus startStatus = r[0] = new StartStatus(); -// ActStatus fetchStatus = r[1] = new FetchStatus(); -// ActStatus focusStatus = r[2] = new FocusStatus(); - AppMgr.transam.setHandler(handler); + // ActStatus fetchStatus = r[1] = new FetchStatus(); + // ActStatus focusStatus = r[2] = new FocusStatus(); + if (transam == null) + Log.d(LogInfo.exception, "transam = null"); + transam.setHandler(handler); actMgr = new ActMgr(this, startStatus, r); -// actMgr.add(startStatus, FocuseButtonPress, focusStatus); -// actMgr.add(startStatus, Fetch, fetchStatus); -// actMgr.add(startStatus, SuccessFetch, startStatus); -// actMgr.add(startStatus, Fetch, startStatus); -// actMgr.add(fetchStatus, Fetch, startStatus); -// actMgr.add(fetchStatus, FailedFetch, startStatus); -// actMgr.add(fetchStatus, SuccessFetch, startStatus); -// actMgr.add(focusStatus, FocuseButtonPress, startStatus); -// actMgr.add(focusStatus, mapViewtouched, startStatus); -// actMgr.add(focusStatus, SuccessFetch, focusStatus); -// actMgr.add(focusStatus, Fetch, focusStatus); + // actMgr.add(startStatus, FocuseButtonPress, focusStatus); + // actMgr.add(startStatus, Fetch, fetchStatus); + // actMgr.add(startStatus, SuccessFetch, startStatus); + // actMgr.add(startStatus, Fetch, startStatus); + // actMgr.add(fetchStatus, Fetch, startStatus); + // actMgr.add(fetchStatus, FailedFetch, startStatus); + // actMgr.add(fetchStatus, SuccessFetch, startStatus); + // actMgr.add(focusStatus, FocuseButtonPress, startStatus); + // actMgr.add(focusStatus, mapViewtouched, startStatus); + // actMgr.add(focusStatus, SuccessFetch, focusStatus); + // actMgr.add(focusStatus, Fetch, focusStatus); setContentView(R.layout.activity_main); - + mMapView = (MapView) findViewById(R.id.bmapView); mapMaker = new MapMaker(mMapView, getApplicationContext()); alertMaker = new AlertMaker(Main.this, mapMaker); @@ -345,7 +316,7 @@ public class Main extends PiztorAct { LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll"); - option.setScanSpan(5000); + option.setScanSpan(GPSrefreshrate * 1000); mLocClient.setLocOption(option); mLocClient.start(); mapMaker.UpdateLocationOverlay(locData, false); @@ -354,11 +325,11 @@ public class Main extends PiztorAct { public static void closeBoard(Context cc) { InputMethodManager imm = (InputMethodManager) cc .getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm.isActive()) - imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, - InputMethodManager.HIDE_NOT_ALWAYS); - } - + if (imm.isActive()) + imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, + InputMethodManager.HIDE_NOT_ALWAYS); + } + /* * public boolean onTap(int index) { OverlayItem item = getItem(index); * mCurItem = item; if () } @@ -373,17 +344,17 @@ public class Main extends PiztorAct { btnFetch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { - requesLocation(Infomation.myInfo.company, Infomation.myInfo.section); + } }); - + btnFocus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { focusOn(); } }); - + btnSettings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { @@ -396,15 +367,15 @@ public class Main extends PiztorAct { @Override protected void onRestart() { super.onRestart(); - AppMgr.transam.setHandler(handler); + transam.setHandler(handler); } - + @Override protected void onResume() { isFirstLocation = true; + requestUserInfo(); mapMaker.onResume(); flushMap(); - requesLocation(Infomation.myInfo.company, Infomation.myInfo.section); super.onResume(); } @@ -431,7 +402,7 @@ public class Main extends PiztorAct { @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { - alertMaker.showQuitAlert(); + AppMgr.exit(); return true; } return super.onKeyDown(keyCode, event); diff --git a/client/Piztor/src/com/macaroon/piztor/MapInfo.java b/client/Piztor/src/com/macaroon/piztor/MapInfo.java index 52e168b..d49ac1e 100644 --- a/client/Piztor/src/com/macaroon/piztor/MapInfo.java +++ b/client/Piztor/src/com/macaroon/piztor/MapInfo.java @@ -14,7 +14,6 @@ public class MapInfo { HashMap<Integer, UserInfo> mp; Vector<UserInfo> allUsers; UserInfo myInfo; - Style layout; @SuppressLint("UseSparseArrays") MapInfo() { @@ -32,10 +31,6 @@ public class MapInfo { mp.put(userInfo.uid, userInfo); } - void setStyle(Style layout) { - this.layout = layout; - } - UserInfo getUserInfo(int uid) { if (mp.containsKey(uid)) return mp.get(uid); @@ -57,7 +52,7 @@ class UserInfo { int company; //group id int section; GeoPoint location; - + String nickname; UserInfo(int uid) { this.uid = uid; } @@ -66,7 +61,7 @@ class UserInfo { location = new GeoPoint((int)(lat * 1e6), (int)(lot * 1e6)); } - void setInfo(int company, int section, int sex) { + void setInfo(int company, int section, int sex, String nickName) { this.company = company; this.section = section; this.sex = sex; diff --git a/client/Piztor/src/com/macaroon/piztor/MapMaker.java b/client/Piztor/src/com/macaroon/piztor/MapMaker.java index 0469702..ef79f73 100644 --- a/client/Piztor/src/com/macaroon/piztor/MapMaker.java +++ b/client/Piztor/src/com/macaroon/piztor/MapMaker.java @@ -5,6 +5,8 @@ import java.util.HashMap; import java.util.Timer; import java.util.TimerTask; import java.util.Vector; + +import android.R.drawable; import android.util.Log; import android.util.AttributeSet; import android.annotation.SuppressLint; @@ -28,6 +30,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.widget.FrameLayout; import android.widget.Toast; @@ -100,6 +103,9 @@ public class MapMaker extends Activity { private Context context; private LocationManager locationManager = null; boolean isGPSEnabled; + private int[] myIcons; + private Drawable[] myBM; + private final int iconNum = 4; /** * Constructor @@ -171,7 +177,7 @@ public class MapMaker extends Activity { return false; } } - + /** * Initialize offline map */ @@ -265,7 +271,6 @@ public class MapMaker extends Activity { popLay = new PopupOverlay(mMapView, popListener); } - /** * Initialize touch listener @@ -281,9 +286,24 @@ public class MapMaker extends Activity { InitMyOverLay(); InitPopup(); InitOfflineMap(); + myBM = new Drawable[20]; + initMyIcons(); //InitTouchListenr(); } + public void initMyIcons() { + myBM[0] = context.getResources().getDrawable(R.drawable.circle_red); + myBM[1] = context.getResources().getDrawable(R.drawable.circle_green); + myBM[2] = context.getResources().getDrawable(R.drawable.circle_glass); + myBM[3] = context.getResources().getDrawable(R.drawable.circle_yellow); + myBM[4] = context.getResources().getDrawable(R.drawable.circle_wood); + } + + public Drawable getGroupIcon(int gid) { + if (gid == Infomation.myInfo.section) return myBM[0]; + else return myBM[gid % iconNum]; + } + /** * Update location layer when new location is received */ @@ -296,48 +316,10 @@ public class MapMaker extends Activity { , (int)(locationData.longitude * 1E6))); } } - + /** * Update to draw other users */ - /* - public void UpdateMap(MapInfo mapInfo) { - - if (mapInfo != null) { - preMapInfo = mapInfo; - if (mOverlay != null && mOverlay.getAllItem().size() != 0) { - mOverlay.removeAll(); - } - mOverlay = new MyOverlay(context.getResources().getDrawable(R.drawable.circle_red), mMapView); - GeoPoint p; - Vector<UserInfo> allUsers = mapInfo.getVector(); - if (nowMarker != null) { - mOverlay.addItem(nowMarker); - } - for (int i =1; i < allUsers.size(); i++) { - // it's me! - if (allUsers.get(i).uid == Infomation.myInfo.uid) continue; - p = new GeoPoint((int)(allUsers.get(i).getLatitude() * 1E6), - (int)(allUsers.get(i).getLongitude()*1E6)); - curItem = new OverlayItem(p, "USERNAME HERE!!!!!", ""); - //TODO - //////////////////////////////////////////////////////////// - curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); - mOverlay.addItem(curItem); - } - mItems = new ArrayList<OverlayItem>(); - mItems.addAll(mOverlay.getAllItem()); - } - - if (mMapView != null) { - if (mMapView.getOverlays() != null) { - //mMapView.getOverlays().add(mOverlay); - mMapView.refresh(); - } - } - } - */ - public void UpdateMap(MapInfo mapInfo) { if (mapInfo == null) { @@ -367,7 +349,7 @@ public class MapMaker extends Activity { curItem = new OverlayItem(p, "USERNAME_HERE", "USER_SNIPPET_HERE"); //TODO getDrawable /////////////////////////////// - curItem.setMarker(context.getResources().getDrawable(R.drawable.circle_red)); + curItem.setMarker(getGroupIcon(i.section)); mOverlay.addItem(curItem); hash.put(i.uid, curItem); //if (mMapView != null) @@ -387,28 +369,35 @@ public class MapMaker extends Activity { preMapInfo = mapInfo; } - /** * Update marker - */ + * public void UpdateMarker() { - mOverlay.addItem(nowMarker); if (mMapView != null) { mMapView.getOverlays().add(mOverlay); mMapView.refresh(); } } + */ /** * Draw a marker */ public void DrawMarker(GeoPoint markerPoint) { - nowMarker = new OverlayItem(markerPoint, "THIS IS A MARKER", ""); + if (nowMarker != null) { + nowMarker.setGeoPoint(markerPoint); + mOverlay.updateItem(nowMarker); + mMapView.refresh(); + mMapController.animateTo(markerPoint); + return; + } + nowMarker = new OverlayItem(markerPoint, "MARKER_NAME", ""); nowMarker.setMarker(context.getResources().getDrawable(R.drawable.marker_red)); - Log.d("marker", "new marker created"); - UpdateMap(preMapInfo); + Log.d("marker", "new marker created"); + mOverlay.addItem(nowMarker); + mMapView.refresh(); mMapController.animateTo(markerPoint); } diff --git a/client/Piztor/src/com/macaroon/piztor/PushClient.java b/client/Piztor/src/com/macaroon/piztor/PushClient.java index ea32ad6..fff39fe 100644 --- a/client/Piztor/src/com/macaroon/piztor/PushClient.java +++ b/client/Piztor/src/com/macaroon/piztor/PushClient.java @@ -9,7 +9,6 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException;
import java.util.Vector;
-import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
@@ -25,18 +24,18 @@ public class PushClient { static final int TokenLength = 32;
static final int FingerPrintLength = 32;
- public final static int StartPush =5;
+ static final int StartPush =5;
- public final static int Message = 0;
- public final static int Location = 1;
- public final static int PushMessage =100;
- public final static int PushLocation =101;
+ static final int Message = 0;
+ static final int Location = 1;
+ static final int PushMessage =100;
+ static final int PushLocation =101;
- public final static int Reconnect =-2;
+ static final int Reconnect =-2;
- public final static int Failed = 2;
- public final static int TimeOut = 1;
- public final static int Success = 0;
+ static final int StatusFailed = 2;
+ static final int TimeOut = 1;
+ static final int Success = 0;
private String LastPrint = "";
@@ -45,8 +44,8 @@ public class PushClient { IOException {
try {
client = new Socket();
- client.connect(new InetSocketAddress(site,port), 5000);
- client.setSoTimeout(5000);
+ client.connect(new InetSocketAddress(site,port), retime);
+ client.setSoTimeout(2000);
} catch (UnknownHostException e) {
e.printStackTrace();
throw e;
@@ -68,13 +67,13 @@ public class PushClient { len = IntLength+ByteLength+TokenLength+(r.uname).length()+ByteLength;
byte[] b = new byte[len];
int pos = 0;
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) 5;
pos+=ByteLength;
- write(b,hexStringToBytes(r.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(r.token),pos);
pos+=TokenLength;
- write(b,r.uname.getBytes(),pos);
+ Convert.write(b,r.uname.getBytes(),pos);
pos+=r.uname.length();
b[pos] = 0;
pos+=ByteLength;
@@ -84,13 +83,11 @@ public class PushClient { in.readInt();
in.readUnsignedByte();
int status = in.readUnsignedByte();
- ResStartPush rchk = new ResStartPush(status);
+ if(status == 1) return StatusFailed;
+ ResStartPush rchk = new ResStartPush();
msg.obj = rchk;
msg.what = StartPush;
recall.sendMessage(msg);
- if(status == 1) {
- return Failed;
- }
return Success;
} catch (SocketTimeoutException e){
e.printStackTrace();
@@ -105,7 +102,7 @@ public class PushClient { return client.isClosed();
}
- public void listen(Handler recall,Handler h) throws IOException{
+ public void listen(Handler recall) throws IOException{
client.setSoTimeout(0);
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
@@ -117,7 +114,7 @@ public class PushClient { int tmp = in.readUnsignedByte();
byte[] buffer = new byte[32];
in.read(buffer);
- String p = byteToHexString(buffer);
+ String p = Convert.byteToHexString(buffer);
int outlen;
int pos=0;
byte[] o = new byte[IntLength+ByteLength+FingerPrintLength];;
@@ -135,11 +132,11 @@ public class PushClient { recall.sendMessage(msg);
LastPrint = p;
}
- write(o,intToBytes(outlen),pos); //can be folded!
+ Convert.write(o,Convert.intToBytes(outlen),pos); //can be folded!
pos+=IntLength;
o[pos]=(byte) Message;
pos+=ByteLength;
- write(o,hexStringToBytes(p),pos);
+ Convert.write(o,Convert.hexStringToBytes(p),pos);
pos+=FingerPrintLength;
out.write(o);
out.flush();
@@ -163,11 +160,11 @@ public class PushClient { recall.sendMessage(msg);
LastPrint = p;
}
- write(o,intToBytes(outlen),pos);
+ Convert.write(o,Convert.intToBytes(outlen),pos);
pos+=IntLength;
o[pos]=(byte) Location;
pos+=ByteLength;
- write(o,hexStringToBytes(p),pos);
+ Convert.write(o,Convert.hexStringToBytes(p),pos);
pos+=FingerPrintLength;
out.write(o);
out.flush();
@@ -189,64 +186,5 @@ public class PushClient { throw e;
}
}
-
- @SuppressLint("DefaultLocale")
- private static byte[] hexStringToBytes(String hexString) {
- if (hexString == null || hexString.equals("")) {
- return null;
- }
- hexString = hexString.toUpperCase();
- int length = hexString.length() / 2;
- char[] hexChars = hexString.toCharArray();
- byte[] d = new byte[length];
- for (int i = 0; i < length; i++) {
- int pos = i * 2;
- d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
- }
- return d;
- }
-
- private static byte charToByte(char c) {
- return (byte) "0123456789ABCDEF".indexOf(c);
- }
-
- private static byte[] intToBytes(int i) {
- byte[] d = new byte[4];
- d[0] = (byte)((i >> 24) & 0xFF);
- d[1] = (byte)((i >> 16) & 0xFF);
- d[2] = (byte)((i >> 8) & 0xFF);
- d[3] = (byte)(i & 0xFF);
- return d;
- }
-
- @SuppressLint("UseValueOf")
- public static byte[] doubleToBytes(double d){
- byte[] b=new byte[8];
- long l=Double.doubleToLongBits(d);
- for(int i=0;i < 8;i++){
- b[i]=new Long(l).byteValue();
- l=l>>8;
- }
- return b;
- }
-
- private static void write(byte[] s,byte[] w,int l) {
-
- for(int i=0;i<w.length;i++){
- s[i+l] = w[i];
- }
- }
-
- private static String byteToHexString(byte[] buffer){
- String p ="";
- for (int i = 0; i < buffer.length; i++) {
- String hex = Integer.toHexString(buffer[i] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- p += hex;
- }
- return p;
- }
}
diff --git a/client/Piztor/src/com/macaroon/piztor/RGroup.java b/client/Piztor/src/com/macaroon/piztor/RGroup.java new file mode 100644 index 0000000..95beca7 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/RGroup.java @@ -0,0 +1,10 @@ +package com.macaroon.piztor;
+
+public class RGroup {
+ int company; //group id
+ int section;
+ RGroup(int com,int sec){
+ company = com;
+ section = sec;
+ }
+}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/RUserInfo.java b/client/Piztor/src/com/macaroon/piztor/RUserInfo.java new file mode 100644 index 0000000..3b24aa2 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/RUserInfo.java @@ -0,0 +1,22 @@ +package com.macaroon.piztor;
+
+public class RUserInfo {
+ int uid; //userid
+ String username; //username
+ String nickname; //nickname
+ double latitude; //latitude
+ double longitude; //longitude
+ RGroup gid; //gid
+ int sex; //type 0 for female,type 1 for male
+
+
+ RUserInfo(int u,String user,String nick,double lat,double lot,RGroup g,int s){
+ uid = u;
+ username = user;
+ nickname = nick;
+ latitude = lat;
+ longitude = lot;
+ gid = g;
+ sex =s;
+ }
+}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Req.java b/client/Piztor/src/com/macaroon/piztor/Req.java index ad84922..f4c3a1f 100644 --- a/client/Piztor/src/com/macaroon/piztor/Req.java +++ b/client/Piztor/src/com/macaroon/piztor/Req.java @@ -1,5 +1,7 @@ package com.macaroon.piztor;
+import java.util.Vector;
+
public class Req{
int type; //request type
String token; //authentciation
@@ -13,4 +15,100 @@ public class Req{ time = tm;
alive = av;
}
-}
\ No newline at end of file +}
+
+//--------------------------------------//
+// authentication //
+//--------------------------------------//
+
+class ReqLogin extends Req{
+ String user; //username
+ String pass; //password
+
+ ReqLogin(String u,String p,long time,long alive){
+ super(0,"","",time,alive); //for type 0
+ user = u;
+ pass = p;
+ }
+}
+
+//--------------------------------------//
+// Update Location //
+//--------------------------------------//
+
+class ReqUpdate extends Req{
+ double latitude; //latitude
+ double longitude; //longitude
+
+ ReqUpdate(String token,String name,double lat,double lot,long time,long alive){
+ super(1,token,name,time,alive); //for type 1
+ latitude = lat;
+ longitude = lot;
+ }
+}
+
+//--------------------------------------//
+// Ask user info //
+//--------------------------------------//
+
+class ReqUserInfo extends Req{
+ RGroup gid; //group id
+
+
+ ReqUserInfo(String token,String name,RGroup id,long time,long alive){
+ super(2,token,name,time,alive); //for type 2
+ gid = id;
+ }
+}
+
+//--------------------------------------//
+// Subscription //
+//--------------------------------------//
+
+class ReqSubscription extends Req{
+ int n; //number of users you want to subscirbe
+ Vector<RGroup> slist; //list of users' group id
+
+
+ ReqSubscription(String token,String name,int number,Vector<RGroup> sublist,long time,long alive){
+ super(3,token,name,time,alive); //for type 3
+ n = number;
+ slist = sublist;
+ }
+}
+
+//--------------------------------------//
+// Log out //
+//--------------------------------------//
+
+class ReqLogout extends Req{
+
+ ReqLogout(String token,String name,long time,long alive){
+ super(4,token,name,time,alive); //for type 4
+ }
+}
+
+//--------------------------------------//
+// Start push //
+//--------------------------------------//
+
+class ReqStartPush extends Req{
+
+ ReqStartPush(String token,String name){
+ super(5,token,name,(long) 0,(long) 0); //for type 5
+ }
+}
+
+//--------------------------------------//
+// Send Message //
+//--------------------------------------//
+
+class ReqSendMessage extends Req{
+ String msg;
+
+ ReqSendMessage(String token,String name,String message,long time,long alive){
+ super(6,token,name,time,alive); //for type 6
+ msg = message;
+ }
+}
+
diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLocation.java b/client/Piztor/src/com/macaroon/piztor/ReqLocation.java deleted file mode 100644 index 4ed1ffc..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqLocation.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Ask Location //
-//--------------------------------------//
-
-public class ReqLocation extends Req{
- int company; //group id;
- int section;
-
- ReqLocation(String token,String name,int com,int sec,long time,long alive){
- super(2,token,name,time,alive); //for type 2
- company = com;
- section = sec;
- }
-}
\ 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 deleted file mode 100644 index 23aba93..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqLogin.java +++ /dev/null @@ -1,16 +0,0 @@ -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,"","",time,alive); //for type 0
- user = u;
- pass = p;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLogout.java b/client/Piztor/src/com/macaroon/piztor/ReqLogout.java deleted file mode 100644 index 22bddfa..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqLogout.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Log out //
-//--------------------------------------//
-
-public class ReqLogout extends Req{
-
- ReqLogout(String token,String name,long time,long alive){
- super(4,token,name,time,alive); //for type 4
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqSendMessage.java b/client/Piztor/src/com/macaroon/piztor/ReqSendMessage.java deleted file mode 100644 index d5bcef4..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqSendMessage.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Send Message //
-//--------------------------------------//
-
-public class ReqSendMessage extends Req{
- String msg;
-
- ReqSendMessage(String token,String name,String message,long time,long alive){
- super(6,token,name,time,alive); //for type 6
- msg = message;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqStartPush.java b/client/Piztor/src/com/macaroon/piztor/ReqStartPush.java deleted file mode 100644 index 91d8c0f..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqStartPush.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Start push //
-//--------------------------------------//
-
-public class ReqStartPush extends Req{
-
- ReqStartPush(String token,String name){
- super(5,token,name,(long) 0,(long) 0); //for type 5
- }
-}
\ 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 deleted file mode 100644 index 234114a..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Update Location //
-//--------------------------------------//
-
-public class ReqUpdate extends Req{
- double latitude; //latitude
- double longitude; //longitude
-
- ReqUpdate(String token,String name,double lat,double lot,long time,long alive){
- super(1,token,name,time,alive); //for type 1
- latitude = lat;
- longitude = lot;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqUserInfo.java b/client/Piztor/src/com/macaroon/piztor/ReqUserInfo.java deleted file mode 100644 index 89c20ee..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqUserInfo.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Ask user info //
-//--------------------------------------//
-
-public class ReqUserInfo extends Req{
- int uid; //user id
-
-
- ReqUserInfo(String token,String name,int id,long time,long alive){
- super(3,token,name,time,alive); //for type 3
- uid = id;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqUserinfo.java b/client/Piztor/src/com/macaroon/piztor/ReqUserinfo.java deleted file mode 100644 index 77bcf84..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ReqUserinfo.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.macaroon.piztor;
-
-//--------------------------------------//
-// Ask user info //
-//--------------------------------------//
-
-public class ReqUserinfo extends Req{
- int uid; //user id
-
-
- ReqUserinfo(String token,String name,int id,long time,long alive){
- super(3,token,name,time,alive); //for type 3
- uid = id;
- }
-}
\ 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 index a225080..699de45 100644 --- a/client/Piztor/src/com/macaroon/piztor/Res.java +++ b/client/Piztor/src/com/macaroon/piztor/Res.java @@ -1,11 +1,146 @@ package com.macaroon.piztor;
+import java.util.Vector;
+
public class Res{
+
+ static final int Login =0;
+ static final int Update =1;
+ static final int UserInfo =2;
+ static final int Subscription =3;
+ static final int Logout =4;
+ static final int StartPush =5;
+ static final int SendMessage =6;
+ static final int PushMessage =100;
+ static final int PushLocation =101;
+
int type;
- int status;
- Res(int t,int s){
+ Res(int t){
type = t;
- status = s;
}
}
+//--------------------------------------//
+// Respond to login //
+//--------------------------------------//
+
+class ResLogin extends Res{
+ String t; //user token
+ RUserInfo uinfo; //userinfo
+ Vector<RGroup> sublist; //list of users subscribed
+ int subscribeNumber; //number of users subscribed
+
+ ResLogin(String token,RUserInfo rui,Vector<RGroup> slist,int subn){
+ super(0); //for type 0
+ t = token;
+ uinfo = rui;
+ sublist = slist;
+ subscribeNumber = subn;
+ }
+}
+
+//--------------------------------------//
+// Respond to update location //
+//--------------------------------------//
+
+class ResUpdate extends Res{
+
+ ResUpdate(){
+ super(1); //for type 1
+ }
+}
+
+//--------------------------------------//
+// Respond to User Info //
+//--------------------------------------//
+
+class ResUserInfo extends Res{
+ int number; //number of users
+ Vector<RUserInfo> uinfo;
+
+ ResUserInfo(int n,Vector<RUserInfo> rui){
+ super(2); //for type 2
+ number = n;
+ uinfo = rui;
+ }
+}
+
+//--------------------------------------//
+// Respond to Update Subscription //
+//--------------------------------------//
+
+class ResSubscription extends Res{
+
+ ResSubscription(){
+ super(3); //for type 3
+ }
+}
+
+//--------------------------------------//
+// Respond to logout //
+//--------------------------------------//
+
+class ResLogout extends Res{
+
+ ResLogout(){
+ super(4); //for type 4
+ }
+}
+
+//--------------------------------------//
+// Respond to start push //
+//--------------------------------------//
+
+class ResStartPush extends Res{
+
+ ResStartPush(){
+ super(5); //for type 5
+ }
+}
+
+//--------------------------------------//
+// Respond to send Message //
+//--------------------------------------//
+
+class ResSendMessage extends Res{
+
+ ResSendMessage(){
+ super(6); //for type 6
+ }
+}
+
+//---------------------------------------------------------------------------------------------------//
+
+
+
+//---------------------------------------------------------------------------------------------------//
+
+
+
+//--------------------------------------//
+// Push Message //
+//--------------------------------------//
+
+class ResPushMessage extends Res{
+ String message;
+
+ ResPushMessage(String s){
+ super(100); //for type 100
+ message = s;
+ }
+}
+
+//--------------------------------------//
+// Push Location //
+//--------------------------------------//
+
+class ResPushLocation extends Res{
+ Vector<RLocation> l; //vector for location info
+ int n; //number of location info
+
+ ResPushLocation(int num,Vector<RLocation> locationvec){
+ super(101); //for type 101
+ l = locationvec;
+ n = num;
+ }
+}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResLocation.java b/client/Piztor/src/com/macaroon/piztor/ResLocation.java deleted file mode 100644 index a4f2622..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResLocation.java +++ /dev/null @@ -1,18 +0,0 @@ -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,int status,Vector<RLocation> locationvec){
- super(2,status); //for type 2
- 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 deleted file mode 100644 index e2f138c..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResLogin.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to login //
-//--------------------------------------//
-
-public class ResLogin extends Res{
- String t; //user token
- int uid; //userid
-
- ResLogin(int id,String token,int status){
- super(0,status); //for type 0
- t = token;
- uid = id;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResLogout.java b/client/Piztor/src/com/macaroon/piztor/ResLogout.java deleted file mode 100644 index 4b2a8d1..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResLogout.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to logout //
-//--------------------------------------//
-
-public class ResLogout extends Res{
-
- ResLogout(int status){
- super(4,status); //for type 4
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResPushLocation.java b/client/Piztor/src/com/macaroon/piztor/ResPushLocation.java deleted file mode 100644 index c3e2b64..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResPushLocation.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.macaroon.piztor;
-
-import java.util.Vector;
-
-//--------------------------------------//
-// Push Location //
-//--------------------------------------//
-
-public class ResPushLocation extends Res{
- Vector<RLocation> l; //vector for location info
- int n; //number of location info
-
- ResPushLocation(int num,Vector<RLocation> locationvec){
- super(101,0); //for type 101
- l = locationvec;
- n = num;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResPushMessage.java b/client/Piztor/src/com/macaroon/piztor/ResPushMessage.java deleted file mode 100644 index ff61ee0..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResPushMessage.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Push Message //
-//--------------------------------------//
-
-public class ResPushMessage extends Res{
- String message;
-
- ResPushMessage(String s){
- super(100,0); //for type 100
- message = s;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResSendMessage.java b/client/Piztor/src/com/macaroon/piztor/ResSendMessage.java deleted file mode 100644 index 09f3ffa..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResSendMessage.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to send Message //
-//--------------------------------------//
-
-public class ResSendMessage extends Res{
-
- ResSendMessage(int status){
- super(6,status); //for type 6
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResStartPush.java b/client/Piztor/src/com/macaroon/piztor/ResStartPush.java deleted file mode 100644 index 33343d7..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResStartPush.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to start push //
-//--------------------------------------//
-
-public class ResStartPush extends Res{
-
- ResStartPush(int status){
- super(5,status); //for type 5
- }
-}
\ 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 deleted file mode 100644 index dd0d29b..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResUpdate.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to update location //
-//--------------------------------------//
-
-public class ResUpdate extends Res{
-
- ResUpdate(int status){
- super(1,status); //for type 1
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResUserInfo.java b/client/Piztor/src/com/macaroon/piztor/ResUserInfo.java deleted file mode 100644 index 2556c68..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResUserInfo.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to User Info //
-//--------------------------------------//
-
-public class ResUserInfo extends Res{
- int uid; //userid
- int company; //group id
- int section;
- int sex; //type 0 for female,type 1 for male
-
-
- ResUserInfo(int status,int u,int com,int sec,int s){
- super(3,status); //for type 3
- uid = u;
- company = com;
- section = sec;
- sex =s;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResUserinfo.java b/client/Piztor/src/com/macaroon/piztor/ResUserinfo.java deleted file mode 100644 index ed981b4..0000000 --- a/client/Piztor/src/com/macaroon/piztor/ResUserinfo.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.macaroon.piztor;
-
-
-//--------------------------------------//
-// Respond to User Info //
-//--------------------------------------//
-
-public class ResUserinfo extends Res{
- int uid; //userid
- int gid; //groupid
- int sex; //type 0 for female,type 1 for male
-
-
- ResUserinfo(int status,int u,int g,int s){
- super(3,status); //for type 3
- uid = u;
- gid = g;
- sex =s;
- }
-}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Settings.java b/client/Piztor/src/com/macaroon/piztor/Settings.java index c0ca901..b334cc4 100644 --- a/client/Piztor/src/com/macaroon/piztor/Settings.java +++ b/client/Piztor/src/com/macaroon/piztor/Settings.java @@ -1,9 +1,12 @@ package com.macaroon.piztor; +import java.util.Vector; + import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; @@ -12,87 +15,78 @@ import android.widget.Toast; public class Settings extends PiztorAct { Button logout; MapInfo mapInfo; - + Transam transam; // Event final static int logoutButtonPressed = 10; final static int logoutFailed = 11; - - + @SuppressLint("HandlerLeak") Handler handler = new Handler() { @Override public void handleMessage(Message m) { - System.out.println("!!!!!!!!!!!!!!!!!!!!!settings" + m.what); switch (m.what) { - case 1:// 上传自己信息成功or失败 - ResUpdate update = (ResUpdate) m.obj; - if (update.status == 0) - System.out.println("update success"); - else { - System.out.println("update failed"); - actMgr.trigger(AppMgr.errorToken); - } + case Res.Update:// 上传自己信息成功or失败 + Log.d("update location", "successfull"); break; - case 2:// 得到别人的信息 - ResLocation location = (ResLocation) m.obj; - if (location.status == 0) { - mapInfo.clear(); - for (RLocation i : location.l) { - System.out.println(i.id + " : " + i.latitude + " " + i.longitude); - UserInfo info = new UserInfo(i.id); - info.setLocation(i.latitude, i.longitude); - mapInfo.addUserInfo(info); + case Res.UserInfo:// 得到用户信息 + ResUserInfo userInfo = (ResUserInfo) m.obj; + System.out.println("revieve ........" + userInfo.uinfo.size()); + Vector<RUserInfo> uinfo = userInfo.uinfo; + for (RUserInfo info : uinfo) { + System.out.println(info.latitude + " " + + info.longitude); + UserInfo r = mapInfo.getUserInfo(info.uid); + if (r != null) { + r.setInfo(info.gid.company, info.gid.section, info.sex, + info.nickname); + r.setLocation(info.latitude, info.longitude); + } else { + r = new UserInfo(info.uid); + r.setInfo(info.gid.company, info.gid.section, info.sex, + info.nickname); + r.setLocation(info.latitude, info.longitude); + mapInfo.addUserInfo(r); } - } else { - System.out.println("resquest for location failed!"); - actMgr.trigger(AppMgr.errorToken); } break; - case 3:// 得到用户信息 - ResUserInfo r = (ResUserInfo) m.obj; - if (r.status == 0) { - System.out.println("id : " + r.uid + " sex : " + r.sex - + " group : " + r.section); - UserInfo user = mapInfo.getUserInfo(r.uid); - user.setInfo(r.company, r.section, r.sex); - } else { - System.out.println("reqest for userInfo must be wrong!!!"); - actMgr.trigger(AppMgr.errorToken); - } + case Res.Logout:// 登出 + actMgr.trigger(AppMgr.logout); break; - case 4:// 登出 - ResLogout logout = (ResLogout) m.obj; - System.out.println("logout status" + logout.status); - if (logout.status == 0) { - Infomation.token = null; - Infomation.myInfo.company = -1; - Infomation.myInfo.section = -1; - Infomation.myInfo.uid = -1; - Infomation.username = null; - actMgr.trigger(AppMgr.logout); - break; - } else { - Toast toast = Toast.makeText(getApplicationContext(), - "logout failed", Toast.LENGTH_LONG); - toast.show(); - actMgr.trigger(logoutFailed); - } + case Res.PushMessage: + ResPushMessage pushMessage = (ResPushMessage) m.obj; + receiveMessage(pushMessage.message); + break; + case Res.SendMessage: + Log.d(LogInfo.resquest, "send message successfully"); + break; + case Res.PushLocation: + ResPushLocation pushLocation = (ResPushLocation) m.obj; + upMapInfo(pushLocation.l); break; default: break; } } }; - - class StartStatus extends ActStatus { - - @Override - void enter(int e) { + + void upMapInfo(Vector<RLocation> l) { + for (RLocation i : l) { + UserInfo info = AppMgr.mapInfo.getUserInfo(i.id); + if (info != null) { + info.setLocation(i.latitude, i.longitude); + } else { + info = new UserInfo(i.id); + info.setLocation(i.latitude, i.longitude); + AppMgr.mapInfo.addUserInfo(info); + } } + } - @Override - void leave(int e) { - } + void receiveMessage(String msg) { + Log.d("recieve message", msg); + Toast toast = Toast.makeText(getApplicationContext(), msg, + Toast.LENGTH_LONG); + toast.show(); } class LogoutStatus extends ActStatus { @@ -100,28 +94,31 @@ public class Settings extends PiztorAct { @Override void enter(int e) { System.out.println("!!!!!!!logout info send!!!!!!!!"); - AppMgr.transam.send(new ReqLogout(Infomation.token, - Infomation.username, System.currentTimeMillis(), 2000)); + transam.send(new ReqLogout(Infomation.token, Infomation.username, + System.currentTimeMillis(), 2000)); } @Override void leave(int e) { - // TODO Auto-generated method stub } + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mapInfo = AppMgr.mapInfo; + transam = AppMgr.transam; + if (transam == null) + Log.d(LogInfo.exception, "transam = null"); + transam.setHandler(handler); ActStatus[] r = new ActStatus[3]; - ActStatus start = r[0] = new StartStatus(); + ActStatus start = r[0] = new EmptyStatus(); ActStatus logout = r[2] = new LogoutStatus(); actMgr = new ActMgr(this, start, r); actMgr.add(start, logoutButtonPressed, logout); actMgr.add(logout, logoutFailed, start); - AppMgr.transam.setHandler(handler); - mapInfo = AppMgr.mapInfo; setContentView(R.layout.activity_settings); } @@ -132,7 +129,7 @@ public class Settings extends PiztorAct { logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - actMgr.trigger(logoutButtonPressed); + actMgr.trigger(logoutButtonPressed); } }); } diff --git a/client/Piztor/src/com/macaroon/piztor/SocketClient.java b/client/Piztor/src/com/macaroon/piztor/SocketClient.java index 622c581..58b20c7 100644 --- a/client/Piztor/src/com/macaroon/piztor/SocketClient.java +++ b/client/Piztor/src/com/macaroon/piztor/SocketClient.java @@ -9,7 +9,6 @@ import java.net.SocketTimeoutException; import java.net.UnknownHostException;
import java.util.Vector;
-import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
@@ -23,21 +22,33 @@ public class SocketClient { static final int DoubleLength = 8;
static final int TokenLength = 32;
- public final static int Login =0;
- public final static int Update =1;
- public final static int Location =2;
- public final static int UserInfo =3;
- public final static int Logout =4;
- public final static int SendMessage =6;
+ static final int Login =0;
+ static final int Update =1;
+ static final int UserInfo =2;
+ static final int Subscription =3;
+ static final int Logout =4;
+ static final int StartPush =5;
+ static final int SendMessage =6;
- public final static int GroupID =0;
- public final static int Gender =1;
+ static final int ClosePush =-5;
+
+ static final int UID =1;
+ static final int Uname =2;
+ static final int Nname =3;
+ static final int Gender =4;
+ static final int GroupID =5;
+ static final int Latitude =6;
+ static final int Longitude =7;
+
+ static final int StatusFailed = 2;
+ static final int TimeOut = 1;
+ static final int Success = 0;
public SocketClient(String site, int port, int retime) throws UnknownHostException,
IOException {
try {
client = new Socket();
- client.connect(new InetSocketAddress(site,port), 5000);
+ client.connect(new InetSocketAddress(site,port), retime);
client.setSoTimeout(retime);
} catch (UnknownHostException e) {
e.printStackTrace();
@@ -48,7 +59,7 @@ public class SocketClient { }
}
- public int sendMsg(Req req,Handler recall) throws IOException,SocketTimeoutException {
+ public int sendMsg(Req req,Handler recall,Handler h) throws IOException,SocketTimeoutException {
try {
DataOutputStream out = new DataOutputStream(
client.getOutputStream());
@@ -61,15 +72,15 @@ public class SocketClient { ReqLogin rau = (ReqLogin) req;
len = IntLength+ByteLength+rau.user.length()+ByteLength+rau.pass.length()+ByteLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,rau.user.getBytes(),pos);
+ Convert.write(b,rau.user.getBytes(),pos);
pos+=rau.user.length();
b[pos] = 0;
pos+=ByteLength;
- write(b, rau.pass.getBytes(),pos);
+ Convert.write(b, rau.pass.getBytes(),pos);
pos+= rau.pass.length();
b[pos] = 0;
pos+=ByteLength;
@@ -79,71 +90,78 @@ public class SocketClient { ReqUpdate rup = (ReqUpdate) req;
len = IntLength+ByteLength+TokenLength+(rup.uname).length()+ByteLength+DoubleLength+DoubleLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,hexStringToBytes(rup.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(rup.token),pos);
pos+=TokenLength;
- write(b,(rup.uname).getBytes(),pos);
+ Convert.write(b,(rup.uname).getBytes(),pos);
pos+=(rup.uname).length();
b[pos] = 0;
pos+=ByteLength;
- write(b,doubleToBytes(rup.latitude),pos);
+ Convert.write(b,Convert.doubleToBytes(rup.latitude),pos);
pos+=DoubleLength;
- write(b,doubleToBytes(rup.longitude),pos);
+ Convert.write(b,Convert.doubleToBytes(rup.longitude),pos);
pos+=DoubleLength;
out.write(b);
break;
- case Location:
- ReqLocation ras = (ReqLocation) req;
- len = IntLength+ByteLength+TokenLength+ras.uname.length()+ByteLength+ByteLength+ByteLength;
+ case UserInfo:
+ ReqUserInfo rus = (ReqUserInfo) req;
+ len = IntLength+ByteLength+TokenLength+rus.uname.length()+ByteLength+ByteLength+ByteLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,hexStringToBytes(ras.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(rus.token),pos);
pos+=TokenLength;
- write(b,(ras.uname).getBytes(),pos);
- pos+=(ras.uname).length();
+ Convert.write(b,(rus.uname).getBytes(),pos);
+ pos+=(rus.uname).length();
b[pos] = 0;
pos+=ByteLength;
- b[pos] = (byte) ras.company;
+ b[pos] = (byte) rus.gid.company;
+ pos+=ByteLength;
+ b[pos] = (byte) rus.gid.section;
pos+=ByteLength;
- b[pos] = (byte) ras.section;
- pos+=ByteLength;
out.write(b);
break;
- case UserInfo:
- ReqUserInfo rus = (ReqUserInfo) req;
- len = IntLength+ByteLength+TokenLength+rus.uname.length()+ByteLength+IntLength;
+ case Subscription:
+ ReqSubscription rsu = (ReqSubscription) req;
+ int number = rsu.n;
+ len = IntLength+ByteLength+TokenLength+rsu.uname.length()+ByteLength+2*ByteLength*number+ByteLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,hexStringToBytes(rus.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(rsu.token),pos);
pos+=TokenLength;
- write(b,(rus.uname).getBytes(),pos);
- pos+=(rus.uname).length();
+ Convert.write(b,(rsu.uname).getBytes(),pos);
+ pos+=(rsu.uname).length();
+ b[pos] = 0;
+ pos+=ByteLength;
+ for(int i=0;i<number;i++) {
+ b[pos] = (byte) rsu.slist.get(i).company;
+ pos+=ByteLength;
+ b[pos] = (byte) rsu.slist.get(i).section;
+ pos+=ByteLength;
+ }
b[pos] = 0;
pos+=ByteLength;
- write(b,intToBytes(rus.uid),pos);
- pos+=IntLength;
out.write(b);
break;
case Logout:
ReqLogout rlo = (ReqLogout) req;
len = IntLength+ByteLength+TokenLength+rlo.uname.length()+ByteLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,hexStringToBytes(rlo.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(rlo.token),pos);
pos+=TokenLength;
- write(b,(rlo.uname).getBytes(),pos);
+ Convert.write(b,(rlo.uname).getBytes(),pos);
pos+=(rlo.uname).length();
b[pos] = 0;
pos+=ByteLength;
@@ -153,17 +171,17 @@ public class SocketClient { ReqSendMessage rem = (ReqSendMessage) req;
len = IntLength+ByteLength+TokenLength+rem.uname.length()+ByteLength+rem.msg.length()+ByteLength;
b = new byte[len];
- write(b,intToBytes(len),pos);
+ Convert.write(b,Convert.intToBytes(len),pos);
pos+=IntLength;
b[pos] = (byte) tmp;
pos+=ByteLength;
- write(b,hexStringToBytes(rem.token),pos);
+ Convert.write(b,Convert.hexStringToBytes(rem.token),pos);
pos+=TokenLength;
- write(b,(rem.uname).getBytes(),pos);
+ Convert.write(b,(rem.uname).getBytes(),pos);
pos+=(rem.uname).length();
b[pos] = 0;
pos+=ByteLength;
- write(b,rem.msg.getBytes(),pos);
+ Convert.write(b,rem.msg.getBytes(),pos);
pos+=rem.msg.length();
b[pos] = 0;
pos+=ByteLength;
@@ -176,85 +194,211 @@ public class SocketClient { int outlen = in.readInt();
int type = in.readUnsignedByte();
int status = in.readUnsignedByte();
+ if(status == 1) return StatusFailed;
switch (type) {
case Login:
- int id = in.readInt();
byte[] buffer = new byte[32];
in.read(buffer);
- String tk = "";
- for (int i = 0; i < buffer.length; i++) {
- String hex = Integer.toHexString(buffer[i] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- tk += hex;
+ String tk = Convert.byteToHexString(buffer);
+ outlen-=(IntLength+ByteLength+TokenLength+ByteLength);
+ int cnt = 0;
+ int uid =0,s =0;
+ String uname ="",nname ="";
+ double lat =0.0,lot =0.0;
+ RGroup rg = null;
+ int i = 0;
+ byte[] bu = new byte[200];
+ while(cnt < 7) {
+ int typ = in.readUnsignedByte();
+ outlen-=ByteLength;
+ switch(typ){
+ case UID:
+ uid = in.readInt();
+ outlen-=IntLength;
+ break;
+ case Uname:
+ i = 0;
+ while(true) {
+ bu[i] = in.readByte();
+ if(bu[i] == 0)break;
+ i++;
+ }
+ byte[] wr = new byte[i];
+ for(int j=0;j<i;j++){
+ wr[j] = bu[j];
+ }
+ uname = new String(wr);
+ outlen-=ByteLength*(i+1);
+ break;
+ case Nname:
+ i = 0;
+ while(true) {
+ bu[i] = in.readByte();
+ if(bu[i] == 0)break;
+ i++;
+ }
+ byte[] wt = new byte[i];
+ for(int j=0;j<i;j++){
+ wt[j] = bu[j];
+ }
+ nname = new String(wt);
+ outlen-=ByteLength*(i+1);
+ break;
+ case Gender:
+ s = in.readUnsignedByte();
+ outlen-=ByteLength;
+ break;
+ case GroupID:
+ int com = in.readUnsignedByte();
+ int sec = in.readUnsignedByte();
+ rg = new RGroup(com,sec);
+ outlen-=ByteLength*2;
+ break;
+ case Latitude:
+ lat = in.readDouble();
+ outlen-=DoubleLength;
+ break;
+ case Longitude:
+ lot = in.readDouble();
+ outlen-=DoubleLength;
+ break;
+ }
+ cnt++;
}
- ResLogin rchklogin = new ResLogin(id,tk,status);
- msg.obj = rchklogin;
+ RUserInfo r = new RUserInfo(uid,uname,nname,lat,lot,rg,s);
+ in.readUnsignedByte();
+ outlen-=ByteLength;
+ int number =0;
+ System.out.println("read "+ outlen);
+ Vector<RGroup> vrg = new Vector<RGroup>();
+ while(outlen > 1) {
+ int com = in.readUnsignedByte();
+ int sec = in.readUnsignedByte();
+ vrg.add(new RGroup(com,sec));
+ outlen-=ByteLength*2;
+ number++;
+ }
+ in.readUnsignedByte();
+ msg.obj = new ResLogin(tk, r, vrg, number);
msg.what = Login;
recall.sendMessage(msg);
+ Vector<String> vs = new Vector<String>();
+ vs.add(uname);
+ vs.add(tk);
+ Message m = new Message();
+ m.obj = vs;
+ m.what = StartPush;
+ h.sendMessage(m);
break;
case Update:
- msg.obj = new ResUpdate(status);
+ msg.obj = new ResUpdate();
msg.what = Update;
recall.sendMessage(msg);
break;
- case Location:
- int n = 0;
- outlen-=(IntLength+ByteLength+ByteLength);
- Vector<RLocation> tmpv = new Vector<RLocation>();
- while(outlen > 0) {
- int tid = in.readInt();
- double lat = in.readDouble();
- double lot = in.readDouble();
- tmpv.add(new RLocation(tid,lat,lot));
- outlen -= (IntLength+DoubleLength+DoubleLength);
- n++;
- }
- msg.obj = new ResLocation(n,status,tmpv);
- msg.what = Location;
- recall.sendMessage(msg);
- break;
case UserInfo:
outlen-=(IntLength+ByteLength+ByteLength);
- ReqUserInfo rus = (ReqUserInfo) req;
- int u = rus.uid;
- int com = 0,sec = 0,s = 0;
+ int uid1 =0,s1 =0;
+ String uname1 ="",nname1 ="";
+ double lat1 =0.0,lot1 =0.0;
+ RGroup rg1 = null;
+ int k = 0;
+ byte[] bn = new byte[200];
+ Vector<RUserInfo> v = new Vector<RUserInfo>();
+ int n = 0;
while(outlen > 0) {
- int typ = in.readUnsignedByte();
- outlen-=ByteLength;
- switch(typ){
- case GroupID:
- com = in.readUnsignedByte();
- sec = in.readUnsignedByte();
- outlen-=(ByteLength+ByteLength);
- break;
- case Gender:
- s = in.readUnsignedByte();
+ int tmpcnt =0;
+ while(tmpcnt < 7) {
+ int typ = in.readUnsignedByte();
outlen-=ByteLength;
- break;
+ switch(typ){
+ case UID:
+ uid1 = in.readInt();
+ outlen-=IntLength;
+ break;
+ case Uname:
+ k = 0;
+ while(true) {
+ bn[k] = in.readByte();
+ if(bn[k] == 0)break;
+ k++;
+ }
+ byte[] wr = new byte[k];
+ for(int j=0;j<k;j++){
+ wr[j] = bn[j];
+ }
+ uname1 = new String(wr);
+ outlen-=ByteLength*(k+1);
+ break;
+ case Nname:
+ k = 0;
+ while(true) {
+ bn[k] = in.readByte();
+ if(bn[k] == 0)break;
+ k++;
+ }
+ byte[] wt = new byte[k];
+ for(int j=0;j<k;j++){
+ wt[j] = bn[j];
+ }
+ nname1 = new String(wt);
+ outlen-=ByteLength*(k+1);
+ break;
+ case Gender:
+ s1 = in.readUnsignedByte();
+ outlen-=ByteLength;
+ break;
+ case GroupID:
+ int com = in.readUnsignedByte();
+ int sec = in.readUnsignedByte();
+ rg1 = new RGroup(com,sec);
+ outlen-=ByteLength*2;
+ break;
+ case Latitude:
+ lat1 = in.readDouble();
+ outlen-=DoubleLength;
+ break;
+ case Longitude:
+ lot1 = in.readDouble();
+ outlen-=DoubleLength;
+ break;
+ }
+ tmpcnt++;
}
+ in.readUnsignedByte();
+ outlen-=ByteLength;
+ v.add(new RUserInfo(uid1,uname1,nname1,lat1,lot1,rg1,s1));
+ n++;
}
- msg.obj = new ResUserInfo(status,u,com,sec,s);
+ msg.obj = new ResUserInfo(n,v);
msg.what = UserInfo;
recall.sendMessage(msg);
break;
+ case Subscription:
+ msg.obj = new ResSubscription();
+ msg.what = Subscription;
+ recall.sendMessage(msg);
+ break;
case Logout:
- msg.obj = new ResLogout(status);
+ msg.obj = new ResLogout();
msg.what = Logout;
recall.sendMessage(msg);
+ Message ms = new Message();
+ ms.what = ClosePush;
+ h.sendMessage(ms);
break;
case SendMessage:
- msg.obj = new ResSendMessage(status);
+ msg.obj = new ResSendMessage();
msg.what = SendMessage;
recall.sendMessage(msg);
break;
}
- return 0;
+ return Success;
} catch (SocketTimeoutException e){
- return 1;
+ e.printStackTrace();
+ return TimeOut;
} catch (IOException e) {
+ e.printStackTrace();
throw e;
}
}
@@ -267,50 +411,7 @@ public class SocketClient { throw e;
}
}
-
- @SuppressLint("DefaultLocale")
- private static byte[] hexStringToBytes(String hexString) {
- if (hexString == null || hexString.equals("")) {
- return null;
- }
- hexString = hexString.toUpperCase();
- int length = hexString.length() / 2;
- char[] hexChars = hexString.toCharArray();
- byte[] d = new byte[length];
- for (int i = 0; i < length; i++) {
- int pos = i * 2;
- d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
- }
- return d;
- }
-
- private static byte charToByte(char c) {
- return (byte) "0123456789ABCDEF".indexOf(c);
- }
-
- private static byte[] intToBytes(int i) {
- byte[] d = new byte[4];
- d[0] = (byte)((i >> 24) & 0xFF);
- d[1] = (byte)((i >> 16) & 0xFF);
- d[2] = (byte)((i >> 8) & 0xFF);
- d[3] = (byte)(i & 0xFF);
- return d;
- }
-
- public static byte[] doubleToBytes(double d){
- byte[] b=new byte[8];
- long l=Double.doubleToLongBits(d);
- for(int i=0;i<8;i++){
- b[i] = (byte)(l >>> 8*(7-i));
- }
- return b;
- }
-
- private static void write(byte[] s,byte[] w,int l) {
-
- for(int i=0;i<w.length;i++){
- s[i+l] = w[i];
- }
- }
+
+
}
diff --git a/client/Piztor/src/com/macaroon/piztor/Transam.java b/client/Piztor/src/com/macaroon/piztor/Transam.java index 7902fde..ea5790d 100644 --- a/client/Piztor/src/com/macaroon/piztor/Transam.java +++ b/client/Piztor/src/com/macaroon/piztor/Transam.java @@ -5,12 +5,14 @@ import java.net.UnknownHostException; import java.util.LinkedList;
import java.util.Queue;
import java.util.Timer;
+import java.util.TimerTask;
+import java.util.Vector;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
-// Piztor Transmission Protocol v0.4a //
+// Piztor Transmission Protocol v2.0 beta //
//------------------------------------------------//
// //
@@ -24,11 +26,12 @@ import android.os.Message; // 6 for sendmessage //
// //
// 100 for pushmessage //
+// 101 for pushlocation //
// //
// ----------I'm the division line-------- //
// //
// -1 for Exceptions //
-// Exception (req type , exception type) //
+// Exception (req type,ex type,exception type) //
// //
// ----------I'm the division line-------- //
// //
@@ -56,7 +59,6 @@ import android.os.Message; // status -- 0 for success //
// 1 for failed/invalid //
// //
-// push message -- message //
// //
//------------------------------------------------//
@@ -64,53 +66,47 @@ import android.os.Message; public class Transam implements Runnable {
- public final static int Login =0;
- public final static int Update =1;
- public final static int Location =2;
- public final static int UserInfo =3;
- public final static int Logout =4;
- public final static int StartPush =5;
- public final static int SendMessage =6;
+ static final int Login =0;
+ static final int Update =1;
+ static final int UserInfo =2;
+ static final int Subscription =3;
+ static final int Logout =4;
+ static final int StartPush =5;
+ static final int SendMessage =6;
- public final static int PushMessage =100;
- public final static int PushLocation =101;
+ static final int ClosePush = -5;
- public final static int GroupID =0;
- public final static int Gender =1;
+ static final int EConnectedFailedException =101;
+ static final int ETimeOutException =102;
+ static final int EJavaHostException =103;
+ static final int EPushFailedException =104;
+ static final int EIOException =105;
+ static final int EUnknownHostException =106;
+ static final int EStatusFailedException =107;
- public final static int EConnectedFailedException =101;
- public final static int ETimeOutException =102;
- public final static int EJavaHostException =103;
- public final static int EPushFailedException =104;
- public final static int EIOException =105;
- public final static int EUnknownHostException =106;
+ static final int Reconnect =-2;
+ static final int Exception =-1;
+ static final int TimeOut =0;
- public Timer timer;
- public boolean running = false;
- public boolean flag = true;
- public int cnt = 4; //retry times
- public int tcnt; //current remain retry times
- public int rcnt; //current remain retry times (push)
- public int retime = 2000; //timeout time
- Res res;
- Req req;
- public int p; //port
- public String i; //ip
- Thread thread;
- Handler core;
- Handler recall; //recall
- Queue<Req> reqtask ; //request task
+ private Timer timer;
+ private Timer pushtimer;
+ private boolean running = false;
+ private int cnt = 5; //retry times
+ private int tcnt; //current remain retry times
+ private int rcnt; //current remain retry times (push)
+ private int retime = 2000; //timeout time
+ private Req req;
+ private int p; //port
+ private String i; //ip
+ private Thread thread;
+ private Handler recall; //recall
+ private Queue<Req> reqtask ; //request task
- public String itoken;
- public String iname;
+ private String itoken;
+ private String iname;
- Thread Pushthread;
- PushClient push;
-
-
- public final static int Reconnect =-2;
- public final static int Exception =-1;
- public final static int TimeOut =0;
+ private Thread Pushthread;
+ private PushClient push;
Transam(String ip, int port,Handler Recall) {
p = port;
@@ -124,14 +120,14 @@ public class Transam implements Runnable { }
- public void startPush(String token,String name) {
+ private void startPush(String token,String name) {
itoken = token;
iname = name;
rcnt = cnt;
connectpush();
}
- public void stopPush() {
+ private void stopPush() {
try{
if(push.isClosed() == false) {
push.closeSocket();
@@ -181,7 +177,7 @@ public class Transam implements Runnable { }
else{ //run the request
running = true;
- tcnt = cnt;
+ tcnt = cnt;
connect();
}
}
@@ -201,7 +197,19 @@ public class Transam implements Runnable { Pushthread.start();
}
- class reqpush implements Runnable {
+ class tmain extends TimerTask {
+ public void run() {
+ connect();
+ }
+ };
+
+ class pmain extends TimerTask {
+ public void run() {
+ connectpush();
+ }
+ };
+
+ private class reqpush implements Runnable {
public void run() {
try {
if(itoken == null || iname == null) return;
@@ -217,9 +225,14 @@ public class Transam implements Runnable { }
else if (out == 2){
stopPush();
+ Message msg = new Message();
+ msg.what = Exception;
+ msg.obj = new EStatusFailedException(5,0);
+ recall.sendMessage(msg);
}
else {
- push.listen(recall,handler);
+ rcnt = cnt;
+ push.listen(recall);
}
} catch (UnknownHostException e) {
e.printStackTrace();
@@ -238,23 +251,30 @@ public class Transam implements Runnable { }
}
- class thd implements Runnable {
+ private class thd implements Runnable {
public void run() {
try {
SocketClient client = new SocketClient(i,p,retime);
- int out = client.sendMsg(req,recall);
+ int out = client.sendMsg(req,recall,handler);
if(out == 0){
client.closeSocket();
running = false;
}
- else {
+ else if (out == 1){
client.closeSocket();
- Message m = new Message();
- EConnectFailedException c = new EConnectFailedException(req.type,req.time);
- m.obj = c;
- m.what = Exception;
+ Message m = new Message();
+ m.obj = new ETimeOutException(req.type,req.time);
+ m.what = TimeOut;
handler.sendMessage(m);
- }
+ }
+ else {
+ client.closeSocket();
+ Message msg = new Message();
+ msg.what = Exception;
+ msg.obj = new EStatusFailedException(5,0);
+ recall.sendMessage(msg);
+ running = false;
+ }
} catch (UnknownHostException e) {
e.printStackTrace();
Message msg = new Message();
@@ -272,15 +292,18 @@ public class Transam implements Runnable { }
}
+
@SuppressLint("HandlerLeak")
- Handler handler = new Handler() {
+ private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case Exception:
if (tcnt > 0) {
tcnt--;
System.out.println(tcnt);
- connect();
+ timer = new Timer();
+ TimerTask task = new tmain();
+ timer.schedule(task,retime);
} else if (tcnt == 0) {
Message m = new Message();
m.obj = msg.obj;
@@ -292,7 +315,10 @@ public class Transam implements Runnable { case TimeOut:
if (tcnt > 0) {
tcnt--;
- connect();
+ System.out.println(tcnt);
+ timer = new Timer();
+ TimerTask task = new tmain();
+ timer.schedule(task,retime);
} else if (tcnt == 0) {
Message m = new Message();
EConnectFailedException c = new EConnectFailedException(req.type,req.time);
@@ -305,72 +331,33 @@ public class Transam implements Runnable { case Reconnect:
if (rcnt > 0) {
rcnt--;
- connectpush();
+ System.out.println(rcnt);
+ pushtimer = new Timer();
+ TimerTask task = new pmain();
+ pushtimer.schedule(task,retime);
} else if (rcnt == 0) {
Message m = new Message();
- //EPushFailedException c = new EPushFailedException(req.type);
- m.obj = msg.obj;
+ EPushFailedException c = new EPushFailedException(5,0);
+ //m.obj = msg.obj;
+ m.obj = c;
m.what = Exception;
recall.sendMessage(m);
}
break;
+ case StartPush:
+ @SuppressWarnings("unchecked")
+ Vector<String> s = (Vector<String>) msg.obj;
+ startPush(s.get(1),s.get(0));
+ System.out.println("startpush");
+ break;
+ case ClosePush:
+ stopPush();
+ System.out.println("closepush");
+ break;
}
super.handleMessage(msg);
}
};
- class EException extends Exception {
- private static final long serialVersionUID = 100L;
- int Rtype;
- int Etype;
- long time;
- public EException(int e,int r,long timep) {
- super();
- Rtype = r;
- Etype = e;
- time = timep;
- }
- }
-
- class EConnectFailedException extends EException{
- private static final long serialVersionUID = 101L;
- public EConnectFailedException(int t,long timep) {
- super(101,t,timep);
- }
- }
-
- class ETimeOutException extends EException{
- private static final long serialVersionUID = 102L;
- public ETimeOutException(int t,long timep) {
- super(102,t,timep);
- }
- }
-
- class EJavaHostException extends EException{
- private static final long serialVersionUID = 103L;
- public EJavaHostException(int t,long timep) {
- super(103,t,timep);
- }
- }
-
- class EPushFailedException extends EException{
- private static final long serialVersionUID = 104L;
- public EPushFailedException(int t,long timep) {
- super(104,t,timep);
- }
- }
-
- class EIOException extends EException{
- private static final long serialVersionUID = 105L;
- public EIOException(int t,long timep) {
- super(105,t,timep);
- }
- }
- class EUnknownHostException extends EException{
- private static final long serialVersionUID = 106L;
- public EUnknownHostException(int t,long timep) {
- super(106,t,timep);
- }
- }
}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/UpdateInfo.java b/client/Piztor/src/com/macaroon/piztor/UpdateInfo.java new file mode 100644 index 0000000..0521432 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/UpdateInfo.java @@ -0,0 +1,5 @@ +package com.macaroon.piztor; + +public class UpdateInfo { + +} |