diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml index 2a56acebd..f88277d2a 100644 --- a/Android/BewoMitarbeiterApp/app/app.iml +++ b/Android/BewoMitarbeiterApp/app/app.iml @@ -96,6 +96,7 @@ + diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java index c58208ded..362b2bc15 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java @@ -4,6 +4,7 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -17,6 +18,7 @@ import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; +import android.util.Base64; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; @@ -31,27 +33,38 @@ import android.widget.TextView; import android.widget.Toast; import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import javax.crypto.NoSuchPaddingException; + import soapConnection.DataIdentifier; import soapConnection.Packet; -import soapConnection.SoapConnectionManager; + +import util.SecurityUtils; +import util.Util; /** * Created by bib on 03.05.2016. */ public class ChatActivity extends ActionBarActivity{ + private static final String LOG_TAG = "CHAT"; + //View Variablen protected TextView chat; protected EditText text; @@ -59,20 +72,18 @@ public class ChatActivity extends ActionBarActivity{ //Server Variablen public static Socket socket; - protected static final String dstAddress = "192.168.1.103"; //10.0.2.2" - protected static final int dstPort = 5000; - DataOutputStream st; + DataOutputStream socketOutputStream; - String SaveCompleteMS; + String saveCompleteMessage; - BufferedReader in = null; +// BufferedReader inputReader = null; //Design View protected ListView listView; protected boolean isMe = true; - protected List chatMessages; - protected ArrayAdapter adapter; - ChatMessageFormat chatMessage; + public static List chatMessages; + public static ArrayAdapter adapter; + public static ChatMessageFormat chatMessage; Thread currentlisten; @@ -119,22 +130,12 @@ public class ChatActivity extends ActionBarActivity{ titlepic.setImageBitmap(GetCircleBitmap(customerImage)); } - //Online Status listener - /* ImageView img = (ImageView) mCustomView.findViewById(R.id.status); - img.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - ChatActivity.this.openOptionsMenu(); // activity's onCreateOptionsMenu gets called - //optionsMenu.performIdentifierAction(R.id., 0); - } - });*/ - titlename.setText(name); action.setCustomView(mCustomView); action.setDisplayShowCustomEnabled(true); senden = (Button)findViewById(R.id.Sendebutton); - //chat = (TextView)findViewById(R.id.ChatText); chatMessages = new ArrayList<>(); @@ -144,26 +145,25 @@ public class ChatActivity extends ActionBarActivity{ listView.setAdapter(adapter); try { - - socket = MainActivityMitarbeiter.socket; - in = MainActivityMitarbeiter.in; - //nachricht an server senden welcher name jetz aktiv connected ist - st = new DataOutputStream(socket.getOutputStream()); - }catch(Exception e){/*Fail*/} + MainActivityMitarbeiter.Test(); + Log.i("CHAT", "listen is still alive: " + MainActivityMitarbeiter.listen.isAlive()); + + socketOutputStream = new DataOutputStream(socket.getOutputStream()); + + } catch(Exception e){ + Log.e("CHAT_ERROR", "Fehler bei der Socket-Erstellung: " + e.getMessage()); + } - // MainActivityMitarbeiter.listen.interrupt(); - // MainActivityMitarbeiter.listen = null; CreateFile(); ReadMessageToStorage(); - //Öffnet eine Verbindung zum Server - // new Thread(new OpenConnection()).start(); + //new Thread(new OpenConnection()).start(); text = (EditText)findViewById(R.id.editText); @@ -175,12 +175,12 @@ public class ChatActivity extends ActionBarActivity{ //isMe = true; - if(text.getText().toString().equals("exit")){ + if(text.getText().toString().equals("exit")) { //eine möglich keit die connection zu schließen // new Thread(new ConnectionClose()).start(); - }else if(!text.getText().toString().equals("")){ + } else if(!text.getText().toString().equals("")) { new Thread(new MessageSender()).start(); - }else{ + } else { Toast.makeText(ChatActivity.this, "Sie müssen schon Text eingeben ", Toast.LENGTH_SHORT).show(); } } @@ -191,63 +191,54 @@ public class ChatActivity extends ActionBarActivity{ t.start(); //MainActivityMitarbeiter.listen.sus + //sharedpreferences = true; + + SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("IsInChatActivity", true); + editor.commit(); } - /*public class OpenConnection implements Runnable{ - public void run(){ - try { - socket = new Socket(dstAddress,dstPort); - // Log.v("Status: ","Vorhanden 3"); - - //nachricht an server senden welcher name jetz aktiv connected ist - dataOutputStream = new DataOutputStream(socket.getOutputStream()); - name=name+"/1"; - byte[] ts = name.getBytes(); - dataOutputStream.write(ts); - dataOutputStream.flush(); - - } catch (Exception e) { - // e.printStackTrace(); - Log.v("Connection: ","Konnte nicht Aufgebaut"); - socket = null; - //methode zur abfrage - - } - } - }*/ - public class MessageSender implements Runnable{ public void run(){ - String al = text.getText().toString(); - - byte[] ts = al.getBytes(); - - - //TODO: Packet erstellen - //ChatActivity. - try{ - if(socket!= null ) { + Log.i(LOG_TAG, "Sende Nachricht..."); + + if(socket != null ) { + + Log.d(LOG_TAG, "Ist der Socket mit dem Server Verbunden: " + (socket.isConnected())); + Packet p = new Packet(); p.ChatMessage = text.getText().toString(); - p.SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue(); p.ChatDataIdentifier = DataIdentifier.MESSAGE; - p.ChatName = SoapConnectionManager.User.getFullName(); p.RecipientPersonOid = personOid; - st.write(p.GetDataStream()); - st.flush(); + SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0); + + byte[] tenantByteArray = Base64.decode(settings.getString(Util.PREFS_TENANT_KEY, null), Base64.DEFAULT); + ByteArrayInputStream tenantStream = new ByteArrayInputStream(tenantByteArray); + + p.Tenant = SecurityUtils.decrypt(tenantStream).toString(); + + socketOutputStream.write(p.GetDataStream()); + socketOutputStream.flush(); + } + else { + Log.i("SEND_CHAT_MESSAGE","Socket ist null"); } // Update der GUI listView.post(new Runnable() { @Override public void run() { + + Log.i(LOG_TAG, "Führe GUI-Update durch..."); + Calendar c = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); String formattedDate = df.format(c.getTime()); - SaveCompleteMS = text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n"; + saveCompleteMessage = text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n"; WriteMessagesfromStorage(text.getText().toString()+"/"+isMe+"%"+formattedDate+"\n"); @@ -256,113 +247,73 @@ public class ChatActivity extends ActionBarActivity{ adapter.notifyDataSetChanged(); text.setText(""); - } }); }catch(IOException s){ Log.v("Status: ","Senden einer Nachricht konnte nicht ausgeführt werden. Save wird ausgeführt"); - SaveAfterLoseConnection(SaveCompleteMS); + SaveAfterLoseConnection(saveCompleteMessage); s.printStackTrace(); + } catch (NoSuchPaddingException | InvalidAlgorithmParameterException | NoSuchAlgorithmException | InvalidKeyException e) { + e.printStackTrace(); } } } - /* public class ConnectionClose implements Runnable{ - public void run(){ - try { - // Log.v("Bin ich Überhaupt", "Hier drinne"); - if (dataOutputStream != null) { - dataOutputStream.flush(); - dataOutputStream.close(); - } - if (socket != null) - socket = null; - // Log.v("Schliesen :","?? Möglich"); - // } - Log.v("Status","Socket succesfull closed"); - }catch(IOException se){ - Log.v("Status: ","Schließen nicht möglich. Es ist ein Fehler aufgetreten"); - } - } - }*/ - // Erhalte Messages all the time public class SocketListener implements Runnable{ - String str; - long i = 1; - //BufferedReader in = null; + Packet chatPacket; + public void run(){ try{ - //DesignTechnische gründe - Log.v("Komme","ICh den Rein"); while(true){ - if (socket != null) { - Log.v("Komme","So wie es aussieht nicht "); if(socket.isConnected()) { - Log.v("Connection Steht ", "Connection Steht"); - Log.v("Komme","So wie es aussieht nicht2 "); - //final TextView text = (TextView)findViewById(R.id.ChatText); - final ListView listV = (ListView) findViewById(R.id.list_msg); - Log.v("Komme","So wie es aussieht nicht 3"); - // in = new BufferedReader(new InputStreamReader(MainActivityMitarbeiter.socket.getInputStream())); + InputStream stream = socket.getInputStream(); - /*---> da wird das pendant ausgeführt und nicht dieses */ String s = in.readLine(); - Log.v("Komme","So wie es aussieht nicht 4"); - CharSequence cs = text.getText(); + int size = stream.available(); - // wir nehmen mal cs raus - //str = cs + "\r\n" + s; - str = s; + if(size == 0) { + continue; + } - if (s == null) - break; + Log.i("", ""); + + StringBuilder total = new StringBuilder(stream.available()); + + int counter = 0; + + while(counter < size) { + + char c = (char) stream.read(); + total.append(c); + + counter++; + } + + chatPacket = new Packet(total.toString()); - //Design Spezifisch listV.post(new Runnable() { @Override public void run() { - Calendar c = Calendar.getInstance(); - SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); - String formattedDate = df.format(c.getTime()); + WriteMessagesfromStorage(chatPacket.ChatMessage + "/" + false + "%" + chatPacket.getFormattedMessageTimeStamp() + "\n"); - boolean determind = false; - - WriteMessagesfromStorage(str+"/"+determind+"%"+formattedDate+"\n"); - - chatMessage = new ChatMessageFormat(str, determind, formattedDate); + chatMessage = new ChatMessageFormat(chatPacket.ChatMessage, false, chatPacket.getFormattedMessageTimeStamp()); chatMessages.add(chatMessage); adapter.notifyDataSetChanged(); - - Log.v("",""); - - if(isOnStop == true){ - SetNotify("Bärtiger Hanz",str); - } - } }); - - i++; + } else { + Log.i("SOCKETLISTENER/CHAT", "Nicht mit dem Socket verbunden"); } - } else { - - if (in != null) - in.close(); } - - // else Log.v("Connection","nicht aufgebaut"); nach tausend versuchen break und fehler ausgabe - } }catch(Exception e){ - Log.v("Status ","Verbindung zum Server wurde seitens dem Server getrennt "); - // Log.e(getClass().getName(),e.getMessage()); - // e.printStackTrace(); + Log.e("Status ","Verbindung zum Server wurde seitens dem Server getrennt "); } } } @@ -433,11 +384,11 @@ public class ChatActivity extends ActionBarActivity{ byte[] ts = al.getBytes(); try { - if (socket != null && st != null) { + if (socket != null && socketOutputStream != null) { //try catch bei catch SaveAfterLoseConnection(); - st.write(ts); - st.flush(); + socketOutputStream.write(ts); + socketOutputStream.flush(); } }catch(Exception xs){ @@ -518,9 +469,12 @@ public class ChatActivity extends ActionBarActivity{ } public void onResume() { - isOnStop = false; + SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("IsInChatActivity", true); + editor.commit(); super.onResume(); } @@ -529,9 +483,12 @@ public class ChatActivity extends ActionBarActivity{ // Thread t = new Thread(new ConnectionClose()); // t.start(); + SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("IsInChatActivity", false); + editor.commit(); - isOnStop = true; super.onStop(); } @@ -539,7 +496,10 @@ public class ChatActivity extends ActionBarActivity{ // Thread t = new Thread(new ConnectionClose()); // t.start(); // currentlisten = null; - + SharedPreferences sp = getSharedPreferences(Util.PREFS_NAME, 0); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("IsInChatActivity", false); + editor.commit(); super.onDestroy(); } diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java index 005ea57cf..fc3df8b4d 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java @@ -5,9 +5,11 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Color; import android.support.v4.app.NotificationCompat; import android.os.Bundle; +import android.util.Base64; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -15,11 +17,12 @@ import android.view.View; import android.widget.Button; import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; +import java.io.InputStream; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -31,6 +34,9 @@ import soapConnection.Packet; import soapConnection.SoapCalls; import soapConnection.SoapConnectionManager; +import util.SecurityUtils; +import util.Util; + public class MainActivityMitarbeiter extends Activity { @@ -39,10 +45,8 @@ public class MainActivityMitarbeiter extends Activity { protected Button logoutbutton; public static Socket socket; - protected static final String dstAddress = SoapCalls.DESTINATION_ADDRESS; - protected static final int dstPort = 5000; DataOutputStream dataOutputStream; - public static BufferedReader in = null; +// public static BufferedReader inputReader = null; //Name, der Zum Server gesendet wird protected String name; @@ -55,7 +59,7 @@ public class MainActivityMitarbeiter extends Activity { File Unsendfile; public static Thread listen; - + public static SocketListener socketListener; //Für Notification private static boolean isOnStop = false; @@ -139,7 +143,7 @@ public class MainActivityMitarbeiter extends Activity { public class OpenConnection implements Runnable{ public void run(){ try { - socket = new Socket(dstAddress, dstPort); + socket = new Socket(SoapCalls.DESTINATION_ADDRESS, SoapCalls.DESTINATION_PORT); Log.d("OpenConnection","Verbindung hergestellt"); SendAfterGetConnection(); @@ -152,7 +156,8 @@ public class MainActivityMitarbeiter extends Activity { // dataOutputStream.flush(); // Starte SocketListener - listen = new Thread(new SocketListener()); + socketListener = new SocketListener(); + listen = new Thread(socketListener); listen.start(); } catch (Exception e) { @@ -174,54 +179,60 @@ public class MainActivityMitarbeiter extends Activity { } } + public static void Test() { + if(listen.isAlive()) { + try { + socketListener.terminate(); + listen.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + public class SocketListener implements Runnable { - String str; + private volatile boolean running = true; + + public void terminate() { + running = false; + } public void run() { try { - while (true) { + while (running) { if (socket != null) { if (socket.isConnected()) { //----------> isThreadPausabfrage das könnte das Problem mit dem SocketListener vorort beheben - in = new BufferedReader(new InputStreamReader(socket.getInputStream())); - Log.v("Connection Steht ", "Message Erhalten"); - String s = in.readLine(); + InputStream stream = socket.getInputStream(); - String[] splitt = s.split(":"); + int size = stream.available(); - str = s; - - if (s == null) { - break; + if(size == 0) { + continue; } - Calendar c = Calendar.getInstance(); - SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); - String formattedDate = df.format(c.getTime()); + StringBuilder total = new StringBuilder(stream.available()); - boolean determind = false; + int counter = 0; - Log.v("MESSAGE",splitt[0]); - CreateFile(splitt[0]); + while(counter < size) { - Log.v("MESSAGE", "Komme ich in den Save-Bereich hinein"); + char c = (char) stream.read(); - WriteMessagesfromStorage(splitt[1] + "/" + determind + "%" + formattedDate + "\n"); + total.append(c); - SetNotify(splitt[0], splitt[1]); - - } else { - if (in != null) { - in.close(); + counter++; } + + Log.i("MESSAGE/MAIN", "Empfangene Nachricht: " + total.toString()); } } } } catch(Exception e) { - Log.v("Status ","Verbindung zum Server wurde serverseitig getrennt "); - // Log.e(getClass().getName(),e.getMessage()); - in = null; + Log.e("Listener/Main", "" + e); + + e.printStackTrace(); } } } @@ -238,13 +249,9 @@ public class MainActivityMitarbeiter extends Activity { socket.close(); } - if(in != null) { - in = null; - } - - Log.v("Status","Socket succesfully closed"); + Log.i("MAIN CONNECTION CLOSE","Socket succesfully closed"); }catch(IOException se){ - Log.v("Fehler Aufgetreten",se.getMessage()); + Log.e("MAIN ERROR:", se.getMessage()); } } } @@ -274,9 +281,14 @@ public class MainActivityMitarbeiter extends Activity { if(socket.isConnected()) { try { Packet p = new Packet(); - p.ChatName = SoapConnectionManager.User.getFullName(); + + SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0); + + byte[] tenantByteArray = Base64.decode(settings.getString(Util.PREFS_TENANT_KEY, null), Base64.DEFAULT); + ByteArrayInputStream tenantStream = new ByteArrayInputStream(tenantByteArray); + + p.Tenant = SecurityUtils.decrypt(tenantStream).toString(); p.ChatDataIdentifier = DataIdentifier.LOGIN; - p.SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue(); new Thread(new TestMessageSender(p.GetDataStream())).start(); } catch(Exception e) { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java index 0dc528f54..cb414821a 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java @@ -18,8 +18,6 @@ public class MessageAdapter extends ArrayAdapter { private Activity activity; private List messages; - - public MessageAdapter(Activity context, int resource, List objects) { super(context, resource, objects); this.activity = context; @@ -36,37 +34,21 @@ public class MessageAdapter extends ArrayAdapter { ChatMessageFormat chatMessage = getItem(position); int viewType = getItemViewType(position); - - //Splitt message um zu wissen ob from server oder nicht - String line = chatMessage.getMessage(); - - String[] splitt = line.split(":"); +// String line = chatMessage.getMessage(); //Server nachricht kenntlich machen if (chatMessage.getIsME()) { layoutResource = R.layout.item_chat_right; - } else if(splitt[0].equals("Server")) { - layoutResource = R.layout.item_chat_sever_right; +// } else if(splitt[0].equals("Server")) { +// layoutResource = R.layout.item_chat_sever_right; }else { layoutResource = R.layout.item_chat_left; } -/* Original - if (chatMessage.getIsME()) { - layoutResource = R.layout.item_chat_left; - } else { - layoutResource = R.layout.item_chat_right; - } -*/ - /* if (convertView != null) { - holder = (ViewHolder) convertView.getTag(); - Log.v("Status","Bin ich hier ?? "); - } else {*/ convertView = inflater.inflate(layoutResource, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); - //} //set message content holder.msg.setText(chatMessage.getMessage()); @@ -74,8 +56,9 @@ public class MessageAdapter extends ArrayAdapter { //TODO eine weitere option für Chatmessage hinzufügen zum abfragen wegen send Message - if(holder.send_tick != null) - holder.send_tick.setText(Html.fromHtml("✓")+""+Html.fromHtml("✓")); + if(holder.send_tick != null) { + holder.send_tick.setText(Html.fromHtml("✓") + "" + Html.fromHtml("✓")); + } if(chatMessage.getIsME()){ diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java index 1954e2c01..a875af2a1 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java @@ -7,7 +7,8 @@ public enum DataIdentifier { MESSAGE(0), LOGIN(1), LOGOUT(2), - NULL(3); + NULL(3), + STATUS_NOTIFICATION(4); private final int value; DataIdentifier(int value) { @@ -17,4 +18,16 @@ public enum DataIdentifier { public int getValue() { return value; } + + public static DataIdentifier getEnumValue(int pValue) { + DataIdentifier[] identifiers = DataIdentifier.values(); + + for (DataIdentifier identifier : identifiers) { + if (identifier.getValue() == pValue) { + return identifier; + } + } + + return DataIdentifier.NULL; + } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java index b87bfbff7..6953520da 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java @@ -4,7 +4,13 @@ import android.util.Log; import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + /** * Created by JettenM on 05.07.2016. @@ -15,29 +21,73 @@ public class Packet { public int SenderPersonOid; public int RecipientPersonOid; public String ChatMessage; + public Date MessageTimeStamp; + public String Tenant; public Packet() { ChatDataIdentifier = DataIdentifier.NULL; - ChatMessage = null; - ChatName = null; - SenderPersonOid = 0; + ChatMessage = ""; + ChatName = SoapConnectionManager.User.getFullName(); + Tenant = ""; + SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue(); RecipientPersonOid = 0; + + MessageTimeStamp = Calendar.getInstance().getTime(); } + public String getFormattedMessageTimeStamp() { + DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + return df.format(MessageTimeStamp); + } - public Packet(byte[] dataStream) { - ChatDataIdentifier = DataIdentifier.values()[ByteBuffer.allocate(4).getInt()]; + //Aufbau Message: + // die ersten fünf ";" ignorieren + // SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;Tenant;[ClientName][ChatMessage][MessageTimeStamp] + //23;281;20;389;1;[Tenant]; 6 Semikola + public Packet(String message) { + String[] gesplittet = message.split(";"); + + String senderPersonOidString = gesplittet[0]; + String recipientPersonOidString = gesplittet[1]; + String chatNameLengthString = gesplittet[2]; + String chatMessageLengthString = gesplittet[3]; + String chatIdentifierString = gesplittet[4]; + Tenant = gesplittet[5]; + + SenderPersonOid = Integer.parseInt(senderPersonOidString); + RecipientPersonOid = Integer.parseInt(recipientPersonOidString); + + ChatDataIdentifier = DataIdentifier.getEnumValue(Integer.parseInt(chatIdentifierString)); + + int chatNameLength = Integer.parseInt(chatNameLengthString); + int chatMessageLength = Integer.parseInt(chatMessageLengthString); + + int headerLength = senderPersonOidString.length() + recipientPersonOidString.length() + chatNameLengthString.length() + chatMessageLengthString.length() + chatIdentifierString.length() + Tenant.length() + 7; + String actualMessage = message.substring(headerLength - 1); + + ChatName = actualMessage.substring(0, chatNameLength); + + ChatMessage = actualMessage.substring(chatNameLength, chatMessageLength + chatNameLength); + + String dateString = actualMessage.substring(chatMessageLength + chatNameLength); + + DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.GERMAN); + try { + MessageTimeStamp = df.parse(dateString); + } catch (ParseException e) { + e.printStackTrace(); + } } public byte[] GetDataStream() { - String dataStreamAsString = "" + SenderPersonOid + ";" + RecipientPersonOid + ";" + ChatName.length() + ";" + ChatMessage.length() + ";"; + String dataStreamAsString = "" + SenderPersonOid + ";" + RecipientPersonOid + ";" + ChatName.length() + ";" + ChatMessage.length()+ ";" + ChatDataIdentifier.getValue() + ";" + Tenant + ";"; - dataStreamAsString += ChatName + ChatMessage; + dataStreamAsString += ChatName + ChatMessage + getFormattedMessageTimeStamp(); - byte[] blaaah = new byte[1024]; + byte[] blaaah = new byte[dataStreamAsString.length()]; try { blaaah = dataStreamAsString.getBytes("UTF8"); diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java index e1df45b53..4f4e14be9 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java @@ -9,6 +9,7 @@ public class SoapCalls { public static String GET_CONTACTS_FOR_PERSON = "GetContactsForPerson"; public static String DESTINATION_ADDRESS = "192.168.1.103"; + public static int DESTINATION_PORT = 5000; public static String TOKEN_CHECK_URL = "http://" + DESTINATION_ADDRESS + "/bewoplanermobil/main/checktoken?token="; diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/chat.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/chat.xml index 1d0c7e89d..4242f512f 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/chat.xml +++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/chat.xml @@ -42,6 +42,7 @@ android:id="@+id/editText" android:hint="@string/hinttxt_chat" android:padding="10dp" + android:maxLength="1024" />