diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml
index 5c1f8f22c..a8696e47b 100644
--- a/Android/BewoMitarbeiterApp/app/app.iml
+++ b/Android/BewoMitarbeiterApp/app/app.iml
@@ -84,6 +84,7 @@
+
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
index 5166a061c..6f447fe09 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
@@ -18,7 +18,6 @@ import java.util.Locale;
import beyondsoft.bewomitarbeiterapp.ContactListItem;
import entities.ChatMessage;
import soapConnection.SoapConnectionManager;
-import util.BeWoLog;
/**
* Created by bib on 07.06.2016.
@@ -121,15 +120,15 @@ public class DatabaseHandler extends SQLiteOpenHelper {
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE =
"CREATE TABLE " + TABLE_CONTACTS + "(" +
- KEY_ID + " INTEGER PRIMARY KEY," +
- KEY_KONTAKT_NAME + " TEXT,"+
- KEY_PERSONOID + " INTEGER," +
- KEY_PICTURE_BLOB + " BLOB, " +
- KEY_IS_TEAM + " INTEGER, " +
- KEY_TEAM_MEMBER_NAMES + " TEXT, " +
- KEY_TEAM_MEMBER_OIDS + " TEXT, " +
- KEY_VERSION + " INTEGER, " +
- KEY_IS_EMPLOYEE + " INTEGER)";
+ KEY_ID + " INTEGER PRIMARY KEY," +
+ KEY_KONTAKT_NAME + " TEXT,"+
+ KEY_PERSONOID + " INTEGER," +
+ KEY_PICTURE_BLOB + " BLOB, " +
+ KEY_IS_TEAM + " INTEGER, " +
+ KEY_TEAM_MEMBER_NAMES + " TEXT, " +
+ KEY_TEAM_MEMBER_OIDS + " TEXT, " +
+ KEY_VERSION + " INTEGER, " +
+ KEY_IS_EMPLOYEE + " INTEGER)";
db.execSQL(CREATE_CONTACTS_TABLE);
@@ -335,7 +334,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
Date sendDate = null;
if(cursor.getString(9) != null) {
- sendDate = getDateFromString(cursor.getString(9));
+ sendDate = getDateFromString(cursor.getString(9));
}
cursor.close();
@@ -356,16 +355,16 @@ public class DatabaseHandler extends SQLiteOpenHelper {
SQLiteDatabase readableDatabase = this.getReadableDatabase();
Cursor cursor = readableDatabase.query(
- TABLE_CHATMESSAGE,
- CHAT_MESSAGE_COLUMNS,
- KEY_IS_TEAM_CHATMESSAGE + " = 0 AND ((" +
- KEY_SENDER_PERSON_OID_CHATMESSAGE + "=? AND " +
- KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=?) OR (" +
- KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " +
- KEY_SENDER_PERSON_OID_CHATMESSAGE + "=?))"
- ,
- new String[] {String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid), String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid)},
- null, null, null, null);
+ TABLE_CHATMESSAGE,
+ CHAT_MESSAGE_COLUMNS,
+ KEY_IS_TEAM_CHATMESSAGE + " = 0 AND ((" +
+ KEY_SENDER_PERSON_OID_CHATMESSAGE + "=? AND " +
+ KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=?) OR (" +
+ KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " +
+ KEY_SENDER_PERSON_OID_CHATMESSAGE + "=?))"
+ ,
+ new String[] {String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid), String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid)},
+ null, null, null, null);
if(cursor.moveToFirst()) {
do{
@@ -445,15 +444,15 @@ public class DatabaseHandler extends SQLiteOpenHelper {
if(cursor != null) {
cursor.moveToFirst();
- int contactId = cursor.getInt(0);
- String contactName = cursor.getString(1);
- int contactPersonOid = cursor.getInt(2);
- byte[] contactPicture = cursor.getBlob(3);
- boolean contactIsTeam = cursor.getInt(4) == 1;
- String teamMemberOids = cursor.getString(5);
+ int contactId = cursor.getInt(0);
+ String contactName = cursor.getString(1);
+ int contactPersonOid = cursor.getInt(2);
+ byte[] contactPicture = cursor.getBlob(3);
+ boolean contactIsTeam = cursor.getInt(4) == 1;
+ String teamMemberOids = cursor.getString(5);
String teamMemberNames = cursor.getString(6);
- int contactVersion = cursor.getInt(7);
- boolean isEmployee = cursor.getInt(8) == 1;
+ int contactVersion = cursor.getInt(7);
+ boolean isEmployee = cursor.getInt(8) == 1;
ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames, contactVersion, isEmployee);
@@ -631,8 +630,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public ArrayList getUnsentChatMessages() {
- BeWoLog.writeToLogFile("Lade unverschickte Nachrichten aus der Datenbank. (getUnsentMessages)");
-
ArrayList messages = new ArrayList<>();
SQLiteDatabase readableDatabase = this.getReadableDatabase();
@@ -657,8 +654,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
cursor.getString(8)
);
- BeWoLog.writeToLogFile("MessageId: " + message.MessageId + "; IsDelivered: " + message.IsDelivered + "; Name der IsDelivered-Spalte: " + cursor.getColumnName(5) + ". (getUnsentMessages)");
-
if(cursor.getString(9) != null) {
message.SendDate = getDateFromString(cursor.getString(9));
}
@@ -673,15 +668,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public ArrayList getChatMessagesByMessageIds(ArrayList messageIds) {
- String abc = "";
- for(String mid : messageIds) {
- abc += messageIds;
- if(messageIds.indexOf(mid) != (messageIds.size() - 1)) {
- abc += "\n";
- }
- }
- BeWoLog.writeToLogFile(abc);
-
ArrayList result = new ArrayList<>();
SQLiteDatabase readableDatabase = this.getReadableDatabase();
@@ -717,8 +703,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
blubb += "" + i + ". " + cursor.getColumnName(i) + "; ";
}
- BeWoLog.writeToLogFile(blubb);
-
if(cursor.getString(9) != null) {
message.SendDate = getDateFromString(cursor.getString(9));
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
index ab451dc28..dc279b5c5 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
@@ -3,6 +3,7 @@ package beyondsoft.bewomitarbeiterapp;
import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
+import android.content.SharedPreferences;
import android.util.Log;
import com.google.gson.Gson;
@@ -17,10 +18,11 @@ import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapPrimitive;
import java.lang.reflect.Type;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
-import java.util.HashMap;
+import java.util.Locale;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -33,13 +35,12 @@ import soapConnection.JsonSoapPrimitiveRequest;
import soapConnection.Packet;
import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
-import tcpConnection.LoginCallback;
+import tcpConnection.Callback;
import tcpConnection.SocketManager;
import util.BeWoLog;
-import util.ChatMessageDeserializer;
import util.ConnectivityReceiver;
+import util.Util;
-import static soapConnection.SoapCalls.CHECK_MESSAGE_IDS;
/**
* Created by JettenM on 24.08.2016.
@@ -66,6 +67,7 @@ public class BeWoChatApplication extends Application {
private static BeWoChatApplication mInstance;
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ private static final ScheduledExecutorService schedulerTCP = Executors.newScheduledThreadPool(1);
public static Date lastOnlineTS;
@@ -82,11 +84,47 @@ public class BeWoChatApplication extends Application {
public void onCreate() {
super.onCreate();
+ SharedPreferences prefs = getSharedPreferences(Util.PREFS_NAME, MODE_PRIVATE);
+ if(!prefs.contains(Util.PREFS_FIRST_RUN_KEY)) {
+ prefs.edit().putBoolean(Util.PREFS_FIRST_RUN_KEY, false).commit();
+
+ Boolean isDeleted = BeWoLog.deleteLogFile();
+ Log.i("BEWO_CHAT_APPLICATION", "Löschen des Logs war" + (isDeleted ? "" : " nicht") + " erfolgreich");
+ }
+
mInstance = this;
spiceManager.start(this);
keepAlive();
+ keepAliveTCP();
+ }
+
+ public void keepAliveTCP() {
+ final Runnable blubb = new Runnable() {
+ @Override
+ public void run() {
+ if(ConnectivityReceiver.isConnected()) {
+ Packet packet = new Packet();
+ packet.ChatDataIdentifier = DataIdentifier.KEEP_ALIVE;
+ packet.ChatName = SoapConnectionManager.getUser().getFullName();
+ packet.IsEmployee = SoapConnectionManager.getUser().getIsEmployee();
+ packet.Tenant = SoapConnectionManager.getUser().getTenant();
+ packet.MessageTimeStamp = Calendar.getInstance().getTime();
+
+ SocketManager.sendMessage(packet);
+ }
+ }
+ };
+
+ final ScheduledFuture> blubbHandle = schedulerTCP.scheduleAtFixedRate(blubb, refreshIntervalInMinutes, refreshIntervalInMinutes, TimeUnit.MINUTES);
+
+ schedulerTCP.schedule(new Runnable() {
+ @Override
+ public void run() {
+ blubbHandle.cancel(true);
+ }
+ }, 10, TimeUnit.DAYS);
}
public void keepAlive() {
@@ -97,11 +135,14 @@ public class BeWoChatApplication extends Application {
if(ConnectivityReceiver.isConnected()) {
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < getRefreshIntervalInMilliseconds()) {
+ BeWoLog.writeToLogFile("Schicke KeepAlive zum SOAP-Server. (SOAP-KeepAlive)");
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
+ } else {
+ BeWoLog.writeToLogFile("Das Intervall von " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten wurde überschritten. Sende kein KeepAlive an den SOAP-Server. (SOAP-KeepAlive)");
}
+ } else {
+ BeWoLog.writeToLogFile("Bin offline. Sende kein KeepAlive an den SOAP-Server. (SOAP-KeepAlive)");
}
-
- Log.i("LOOPER", "Halte Verbindung zum Soap-Server am leben...");
}
};
@@ -142,7 +183,6 @@ public class BeWoChatApplication extends Application {
Log.e("UNCAUGHT_EXCEPTION", "Eine unbehandelte Ausnahme ist aufgetreten!\n" + ex.getMessage());
ex.printStackTrace();
-
writeExceptionToLog(ex);
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
@@ -162,18 +202,18 @@ public class BeWoChatApplication extends Application {
public void onRequestFailure(SpiceException spiceException) {
Log.e("BEWOAPP", "Fehler beim am Leben erhalten!");
- BeWoLog.writeToLogFile("Verbindungserneuerung ist fehlgeschlagen (JsonSoapPrimitiveRequestListener->onRequestFailure)");
+ BeWoLog.writeToLogFile("Das JSON-Keep-Alives ist fehlgeschlagen (JsonSoapPrimitiveRequestListener->onRequestFailure)");
}
@Override
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
if(soapPrimitive == null) {
Log.e("BEWOAPP", "Antwort ist null!");
- BeWoLog.writeToLogFile("Die Verbindungserneuerung lieferte Null zurück. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
+ BeWoLog.writeToLogFile("Das JSON-Keep-Alives lieferte Null zurück. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
} else {
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
BeWoLog.writeToLogFile("Erneuere die Verbindung. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
- Log.i("BEWOAPP", "Die Antwort hat einen Wert");
+ Log.i("BEWOAPP", "Die Antwort des JSON-Keep-Alives hat einen Wert");
}
}
}
@@ -182,6 +222,12 @@ public class BeWoChatApplication extends Application {
private final static String LOGTAG = "UUID_CHECK";
+ private ArrayList messageIdsWithoutResponse;
+
+ public JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener(ArrayList messageIdsWithoutResponse) {
+ this.messageIdsWithoutResponse = messageIdsWithoutResponse;
+ }
+
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.e(LOGTAG, "Die Anfrage an den Server ist gescheitert! (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestFailure)");
@@ -207,11 +253,14 @@ public class BeWoChatApplication extends Application {
final ArrayList result = gson.fromJson(soapPrimitive.toString(), listType);
if(result != null) {
+ String blubb = "";
+
if(result.size() == 0) {
+ blubb = "keine";
return;
}
- String blubb = "";
+
for(String ms : result) {
blubb += ms;
@@ -219,34 +268,63 @@ public class BeWoChatApplication extends Application {
blubb += "\n";
}
}
- BeWoLog.writeToLogFile("Vom Server zurückgelieferte MessageIds: " + blubb);
+ BeWoLog.writeToLogFile("Vom Server zurückgelieferte MessageIds:\n" + blubb);
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(BeWoChatApplication.getInstance());
- ArrayList messages2send = databaseHandler.getChatMessagesByMessageIds(result);
+ ArrayList demServerBekannteChatMessages = databaseHandler.getChatMessagesByMessageIds(result);
- BeWoLog.writeToLogFile("Es existieren " + messages2send.size() + " Nachrichten, deren Response verloren gegangen ist. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
+ String blubb2 = "";
- for(ChatMessage cm : messages2send) {
- final Packet unsentPacket = new Packet();
+ if(demServerBekannteChatMessages.size() == 0) {
+ blubb2 = "keine";
+ } else {
+ for (ChatMessage cm : demServerBekannteChatMessages) {
+ blubb2 += cm.MessageId;
- unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
- unsentPacket.ChatMessage = cm.ChatText;
- unsentPacket.ChatName = SoapConnectionManager.getUser().getFullName();
- unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
- unsentPacket.ClientseitigeOid = cm.Id;
- unsentPacket.MessageTimeStamp = cm.InsTs;
- unsentPacket.SenderPersonOid = cm.SenderPersonOid;
- unsentPacket.Tenant = SoapConnectionManager.getUser().getTenant();
- unsentPacket.IsDelivered = cm.IsDelivered;
- unsentPacket.MessageId = cm.MessageId;
+ if (demServerBekannteChatMessages.indexOf(cm) != (demServerBekannteChatMessages.size() - 1)) {
+ blubb2 += "\n";
+ }
+ }
+ }
- BeWoLog.writeToLogFile("Verschicke Nachricht, deren Response verloren gegangen ist. ("+unsentPacket.MessageId+") (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)" + unsentPacket.toString());
- SocketManager.sendMessage(unsentPacket);
+ BeWoLog.writeToLogFile("Es existieren " + demServerBekannteChatMessages.size() + " Nachrichten, deren Response verloren gegangen ist. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
+ BeWoLog.writeToLogFile("Die da wären: \n" + blubb2);
- try {
- Thread.sleep(75);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ ArrayList checkedMessages = DatabaseHandler.getInstance(BeWoChatApplication.mInstance).getChatMessagesByMessageIds(messageIdsWithoutResponse);
+
+ for(ChatMessage cm : checkedMessages) {
+ if(demServerBekannteChatMessages.contains(cm)) {
+ BeWoLog.writeToLogFile("ChatMessage ist dem Server bereits bekannt. IsDelivered wird auf true gesetzt. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
+
+ cm.IsDelivered = true;
+ int affectedRowsCount = DatabaseHandler.getInstance(BeWoChatApplication.mInstance).updateChatMessage(cm);
+
+ boolean isRemovalSuccessful = messageIdsWithoutResponse.remove(cm.MessageId);
+
+ BeWoLog.writeToLogFile("ChatMessage wurde erfolgreich geändert: " + (affectedRowsCount > 0) + " und aus der Liste der responselosen entfernt: " + isRemovalSuccessful + ". (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
+ } else {
+ final Packet unsentPacket = new Packet();
+
+ unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
+ unsentPacket.ChatMessage = cm.ChatText;
+ unsentPacket.ChatName = SoapConnectionManager.getUser().getFullName();
+ unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
+ unsentPacket.ClientseitigeOid = cm.Id;
+ unsentPacket.MessageTimeStamp = cm.InsTs;
+ unsentPacket.SenderPersonOid = cm.SenderPersonOid;
+ unsentPacket.Tenant = SoapConnectionManager.getUser().getTenant();
+ unsentPacket.IsDelivered = cm.IsDelivered;
+ unsentPacket.MessageId = cm.MessageId;
+
+ BeWoLog.writeToLogFile("Verschicke Nachricht, deren Response verloren gegangen ist. ("+unsentPacket.MessageId+") (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)\n\t" + unsentPacket.toString());
+ SocketManager.sendMessage(unsentPacket);
+
+ try {
+ Thread.currentThread().sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ writeExceptionToLog(e);
+ }
}
}
} else {
@@ -261,10 +339,9 @@ public class BeWoChatApplication extends Application {
if(isConnected) {
try {
BeWoLog.writeToLogFile("Setze Socket zurück.(reconnectWithServer)");
-// SocketManager.shutDownConnectionToServer("reconnectWithServer");
BeWoLog.writeToLogFile("Setze LoginCallback des Sockets. (reconnectWithServer)");
- SocketManager.loginCallback = new LoginCallback() {
+ SocketManager.loginCallback = new Callback() {
@Override
public void doCallback() {
Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Verschicke nicht verschickte Nachrichten...");
@@ -296,21 +373,22 @@ public class BeWoChatApplication extends Application {
@Override
public void run() {
try {
- BeWoLog.writeToLogFile("Lade nicht verschickte Nachrichten aus der Datenbank zum verschicken.");
+ BeWoLog.writeToLogFile("Lade nicht verschickte Nachrichten aus der Datenbank zum verschicken. (sendUnsentMessages)");
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(context);
ArrayList unsentMessages = databaseHandler.getUnsentChatMessages();
ArrayList messagesWithoutResponse = new ArrayList<>();
if(unsentMessages.size() > 0) {
- BeWoLog.writeToLogFile("Habe " + unsentMessages.size() + " Nachrichten gefunden.");
+ BeWoLog.writeToLogFile("Habe " + unsentMessages.size() + " Nachrichten gefunden. (sendUnsentMessages)");
} else {
- BeWoLog.writeToLogFile("Habe keine nicht verschickten Nachrichten gefunden.");
+ BeWoLog.writeToLogFile("Habe keine nicht verschickten Nachrichten gefunden. (sendUnsentMessages)");
}
for(ChatMessage cm : unsentMessages) {
if (cm.SendDate == null) {
+ Log.i("SEND_UNSENT_MESSAGES", "Die Nachricht wurde erst gar nicht verschickt: " + cm.ChatText);
final Packet unsentPacket = new Packet();
unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
@@ -324,19 +402,27 @@ public class BeWoChatApplication extends Application {
unsentPacket.IsDelivered = cm.IsDelivered;
unsentPacket.MessageId = cm.MessageId;
- BeWoLog.writeToLogFile("Verschicke Nachricht("+unsentPacket.ChatMessage+") mit MessageId (" + unsentPacket.MessageId + ") ");
+ BeWoLog.writeToLogFile("Verschicke Nachricht(" + unsentPacket.ChatMessage + ") mit MessageId (" + unsentPacket.MessageId + "). (sendUnsentMessages)");
SocketManager.sendMessage(unsentPacket);
- Thread.sleep(75);
+
+ Thread.currentThread().sleep(100);
} else {
+ Log.i("SEND_UNSENT_MESSAGES", "Bei der Nachricht wurde die MESSAGE_RESPONSE nicht empfangen: " + cm.ChatText + " " + cm.SendDate);
messagesWithoutResponse.add(cm);
}
}
- BeWoLog.writeToLogFile("Habe " + messagesWithoutResponse.size() + " Nachrichten gefunden, deren Message-Response verloren gegangen ist.");
+ BeWoLog.writeToLogFile("Habe " + messagesWithoutResponse.size() + " Nachrichten gefunden, deren Message-Response verloren gegangen ist. (sendUnsentMessages)");
+ if(messagesWithoutResponse.size() == 0) {
+ return;
+ }
+
+ ArrayList messageIds = new ArrayList<>();
String pExceptions = "";
for(int i = 0; i < messagesWithoutResponse.size(); i++) {
pExceptions += messagesWithoutResponse.get(i).MessageId;
+ messageIds.add(messagesWithoutResponse.get(i).MessageId);
if(i != (messagesWithoutResponse.size() - 1)) {
pExceptions += ";";
@@ -346,7 +432,9 @@ public class BeWoChatApplication extends Application {
ArrayList propertyInfos = new ArrayList<>();
propertyInfos.add(SoapConnectionManager.BuildProperty("messageIds", pExceptions, String.class));
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.CHECK_MESSAGE_IDS, propertyInfos);
- spiceManager.execute(request, new JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener());
+
+ BeWoLog.writeToLogFile("Führe Anfrage durch, ob der Server Nachrichten ohne Message-Response kennt. (sendUnsentMessages)");
+ spiceManager.execute(request, new JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener(messageIds));
} catch (InterruptedException e) {
e.printStackTrace();
}
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 4f8f9bf69..da41ae1fd 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
@@ -43,11 +43,13 @@ import org.ksoap2.serialization.SoapPrimitive;
import java.io.ByteArrayInputStream;
import java.lang.reflect.Type;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import java.util.Locale;
import java.util.UUID;
import Database.DatabaseHandler;
@@ -59,7 +61,7 @@ import soapConnection.Packet;
import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
-import tcpConnection.LoginCallback;
+import tcpConnection.Callback;
import tcpConnection.SocketManager;
import tcpConnection.UIHandler;
import util.BeWoLog;
@@ -200,16 +202,22 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
public void updateUserInterface(final Packet chatPacket) {
try {
Log.i(LOGTAG, "Identifier: " + chatPacket.ChatDataIdentifier.name());
+ BeWoLog.writeToLogFile("Packet erhalten mit DataIdentifier: " + chatPacket.ChatDataIdentifier.name() + ". (ChatActivity)");
switch(chatPacket.ChatDataIdentifier) {
case MESSAGE:
listView.post(new Runnable() {
@Override
public void run() {
- if(chatPacket.SenderPersonOid == recipientPersonOid && BeWoChatApplication.isActivityVisible()) {
- chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false, chatPacket.MessageId));
+ if(chatPacket.SenderPersonOid == recipientPersonOid) {
+ chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, false, chatPacket.ServerseitigeOid, false, chatPacket.MessageId));
adapter.sort(DATE_COMPARATOR);
adapter.notifyDataSetChanged();
+
+ if(!BeWoChatApplication.isActivityVisible()) {
+ Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, chatPacket.IsEmployee, getApplicationContext());
+ }
+
} else {
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, chatPacket.IsEmployee, getApplicationContext());
}
@@ -217,17 +225,15 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
});
break;
-
case MESSAGE_RESPONSE:
+ BeWoLog.writeToLogFile("Empfange Response für Message: " + chatPacket.MessageId);
+
runOnUiThread(new Runnable() {
@Override
public void run() {
for(ChatMessage cm : chatMessages) {
- Log.i("RESPONSE", "lokale Id: " + cm.Id);
- if(cm.Id == chatPacket.ClientseitigeOid) {
- cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
- Log.i("RESPONSE", "COid: " + cm.Id + "; Text: " + cm.ChatText + "; " + cm.ServerseitigeOid);
- break;
+ if(cm.MessageId.equals(chatPacket.MessageId)) {
+ cm.IsDelivered = true;
}
}
@@ -237,7 +243,6 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
});
break;
-
case STATUS_NOTIFICATION_LOGIN:
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt online. (ChatActivity)");
if(chatPacket.SenderPersonOid == recipientPersonOid) {
@@ -259,7 +264,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
public void run() {
ImageView status = (ImageView) mCustomView.findViewById(R.id.status);
status.setImageResource(R.drawable.statusoffline);
- }
+ }
});
}
@@ -357,7 +362,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
final JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos);
- final LoginCallback corruptedSpiceCallback = new LoginCallback() {
+ final Callback corruptedSpiceCallback = new Callback() {
@Override
public void doCallback() {
BeWoLog.writeToLogFile("Callback bei erneutem Login auf dem Soap-Server wird ausgeführt. (ChatActivity)");
@@ -365,15 +370,22 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
spiceManager.shouldStop();
spiceManager.start(ChatActivity.this);
- SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
+ SocketManager.loginCallbackAfterConnectionLost = new Callback() {
@Override
public void doCallback() {
//ReloadChatView(contactName, recipientOid, contactImage, isTeam, teamMemberOids, teamMemberNames, isEmployee);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ adapter.sort(DATE_COMPARATOR);
+ adapter.notifyDataSetChanged();
+ }
+ });
+
}
};
-// SocketManager.shutDownConnectionToServer("ChatActivity->corruptedSpiceCallback");
SocketManager.connectToServer("ChatActivity -> corruptedSpiceCallback");
}
};
@@ -383,8 +395,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
BeWoLog.writeToLogFile("Lade alle Nachrichten für diesen Chat herunter. (ChatActivity)");
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(corruptedSpiceCallback));
} else {
-// SocketManager.shutDownConnectionToServer("ChatActivity->Letzter Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her");
- SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
+ SocketManager.loginCallbackAfterConnectionLost = new Callback() {
@Override
public void doCallback() {
BeWoLog.writeToLogFile("Lade alle Nachrichten für diesen Chat nach fehlgeschlagenem ersten Versuch herunter. (ChatActivity)");
@@ -420,6 +431,9 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
BeWoChatApplication.getInstance().setConnectivityListener(this);
+ adapter.sort(DATE_COMPARATOR);
+ adapter.notifyDataSetChanged();
+
super.onResume();
}
@@ -470,6 +484,27 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
ChatActivity.this.startActivity(dokuActivity);
return true;
+
+// case R.id.action_show_unsent_messages:
+//
+// String message = "";
+// ArrayList unsentMessages = DatabaseHandler.getInstance(ChatActivity.this).getUnsentChatMessages();
+// for(ChatMessage cm : unsentMessages) {
+// String sendDateStr = "";
+//
+// if(cm.SendDate != null) {
+// SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.GERMAN);
+// sendDateStr = dateFormat.format(cm.SendDate);
+// } else {
+// sendDateStr = "null";
+// }
+//
+// message += cm.MessageId + "; " + cm.IsDelivered + "; " + sendDateStr + "\n";
+// }
+//
+// Util.buildAlert(ChatActivity.this, message);
+//
+// return true;
default:
return super.onOptionsItemSelected(item);
}
@@ -527,9 +562,9 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
private final class JsonSoapPrimitiveRequestListener implements RequestListener {
- public LoginCallback corruptedRequestCallback;
+ Callback corruptedRequestCallback;
- public JsonSoapPrimitiveRequestListener(LoginCallback corruptedRequestCallback) {
+ JsonSoapPrimitiveRequestListener(Callback corruptedRequestCallback) {
this.corruptedRequestCallback = corruptedRequestCallback;
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
index 354b2577e..c8bf7306c 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
@@ -53,32 +53,34 @@ public class KontaktAdapter extends ArrayAdapter {
ImageView onlinestats = (ImageView) rowView.findViewById(R.id.status);
imageView = (ImageView) rowView.findViewById(R.id.logo);
- textView.setText(values.get(position).getChatName());
+ ContactListItem currentContact = values.get(position);
- messagePreview.setText(values.get(position).getMessagePreview());
- messagePreview.setTypeface(messagePreview.getTypeface(), values.get(position).getIsNewMessage2Preview() ? 1 : 0);
+ textView.setText(currentContact.getChatName());
- if(values.get(position).isTeam) {
- minitext.setText(values.get(position).teamMemberNames);
+ messagePreview.setText(currentContact.getMessagePreview());
+ messagePreview.setTypeface(messagePreview.getTypeface(), currentContact.getIsNewMessage2Preview() ? 1 : 0);
+
+
+
+ if(currentContact.isTeam) {
+ minitext.setText(currentContact.teamMemberNames);
}
Thread getPic;
- if(values.get(position).getPicture() != null) {
+ if(currentContact.getPicture() != null) {
Log.i("Kontakt", "PersonOid hat Bild");
- byte[] imageAsByteArray = values.get(position).getPicture();
+ byte[] imageAsByteArray = currentContact.getPicture();
Bitmap i = BitmapFactory.decodeByteArray(imageAsByteArray, 0, imageAsByteArray.length);
getPic = new Thread(new CircleBitmapCreator(i));
getPic.start();
} else {
- ContactListItem cli = values.get(position);
-
int bildId = R.drawable.mitarbeiter_avatar;
- if(cli.isTeam) {
+ if(currentContact.isTeam) {
bildId = R.drawable.mitarbeiter_team_avatar;
- } else if(!cli.getIsEmployee()) {
+ } else if(!currentContact.getIsEmployee()) {
bildId = R.drawable.klient_avatar;
}
@@ -87,7 +89,14 @@ public class KontaktAdapter extends ArrayAdapter {
imageView.setImageBitmap(ImageConverter.getRoundedCornerBitmap(bitmap, bitmap.getWidth() / 2));
}
- onlinestats.setImageResource((values.get(position).isOnline ? R.drawable.statusonline : R.drawable.statusoffline));
+ int resourceId;
+ if(currentContact.isTeam) {
+ resourceId = R.drawable.statusteam;
+ } else {
+ resourceId = currentContact.isOnline ? R.drawable.statusonline : R.drawable.statusoffline;
+ }
+
+ onlinestats.setImageResource(resourceId);
return rowView;
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
index b74116868..3aaff2ccb 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
@@ -47,7 +47,7 @@ import soapConnection.OnRequestSuccessCallback;
import soapConnection.Packet;
import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
-import tcpConnection.LoginCallback;
+import tcpConnection.Callback;
import tcpConnection.SocketManager;
import tcpConnection.UIHandler;
import util.BeWoLog;
@@ -166,9 +166,16 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
@Override
public void run() {
isDownloadOfContacsInProgress = false;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ swipeRefreshLayout.setRefreshing(false);
+ }
+ });
+
BeWoLog.writeToLogFile("isDownloadOfContacsInProgress wird nach 10 Sekunden zurückgesetzt.");
}
- }, 10*1000);
+ }, 10 * 1000);
BeWoLog.writeToLogFile("Lade Kontakte (updateContactList)");
swipeRefreshLayout.setRefreshing(true);
@@ -191,12 +198,17 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
final JsonSoapPrimitiveRequest getContactsRequest = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos);
if(ConnectivityReceiver.isConnected()) {
- BeWoLog.writeToLogFile("App ist mit dem Internet verbunden (updateContactList)");
+ BeWoLog.writeToLogFile("App ist mit dem Internet verbunden (updateContactList -> isConnected(✓))");
+
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
- BeWoLog.writeToLogFile("Jetzt - letzter Serverkontakt ist kleiner als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten. (updateContactList)");
- spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() {
+
+ BeWoLog.writeToLogFile("Jetzt - letzter Serverkontakt ist kleiner als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten. (updateContactList -> isConnected(✓) -> IntervallCheck(✓))");
+
+ spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveContactsRequestListener(new OnRequestSuccessCallback() {
@Override
public void doCallback() {
+ BeWoLog.writeToLogFile("Führe Callback des Kontakteladens durch. (updateContactList -> isConnected(✓) -> IntervallCheck(✓) -> Kontakte wurden geladen(✓)");
+
BeWoChatApplication.sendStatusRequest();
swipeRefreshLayout.setRefreshing(false);
@@ -207,30 +219,40 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
final JsonSoapPrimitiveRequest getNewestMessagesRequest = new JsonSoapPrimitiveRequest("GetNewestMessages", propertyInfos);
if(ConnectivityReceiver.isConnected()) {
+
+ BeWoLog.writeToLogFile("(updateContactList -> isConnected(✓) -> IntervallCheck(✓) -> Kontakte wurden geladen(✓) -> isConnected(✓)");
+
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
+
+ BeWoLog.writeToLogFile("(updateContactList -> isConnected(✓) -> IntervallCheck(✓) -> Kontakte wurden geladen(✓) -> isConnected(✓) -> IntervallCheck(✓)");
+
spiceManager.execute(getNewestMessagesRequest, new JsonSoapPrimitiveRequestListenerForNewestMessages());
+ } else {
+ BeWoLog.writeToLogFile("Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her. Starte Verbindung zum SocketServer neu. (updateContactlist)");
+
+ SocketManager.loginCallbackAfterConnectionLost = new Callback() {
+ @Override
+ public void doCallback() {
+ BeWoLog.writeToLogFile("(updateContactList -> isConnected(✓) -> IntervallCheck(✓) -> Kontakte wurden geladen(✓) -> IntervallCheck(x)");
+
+ spiceManager.execute(getNewestMessagesRequest, new JsonSoapPrimitiveRequestListenerForNewestMessages());
+ }
+ };
+
+ SocketManager.connectToServer("KontaktChatActivity -> zweiten Intervall-Check nicht bestanden");
}
} else {
-// SocketManager.shutDownConnectionToServer("KontaktChatAcvitity->Letzer Kontakt ist weniger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her, aber die Internetverbindung war erneut weg");
- SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
- @Override
- public void doCallback() {
- spiceManager.execute(getNewestMessagesRequest, new JsonSoapPrimitiveRequestListenerForNewestMessages());
- }
- };
-
- SocketManager.connectToServer("KontaktChatActivity -> Intervall nicht erreicht");
+ BeWoLog.writeToLogFile("updateContactList -> isConnected(✓) -> IntervallCheck(✓) -> Kontakte wurden geladen(✓) -> isConnected(x)");
}
}
}));
} else {
- BeWoLog.writeToLogFile("Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her. Starte Verbindung zum SocketServer neu. (updateContactlist)");
+ BeWoLog.writeToLogFile("Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her. Starte Verbindung zum SocketServer neu. (updateContactlist -> isConnected(✓) -> IntervallCheck(x))");
-// SocketManager.shutDownConnectionToServer("KontaktChatAcitivty->Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her");
- SocketManager.loginCallback2 = new LoginCallback() {
+ SocketManager.loginCallback2 = new Callback() {
@Override
public void doCallback() {
- spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() {
+ spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveContactsRequestListener(new OnRequestSuccessCallback() {
@Override
public void doCallback() {
BeWoLog.writeToLogFile("LoginCallback mit Abruf der neuesten Nachrichten und den Kontakten wird aufgerufen. (updateContactlist)");
@@ -245,18 +267,22 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
final JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest("GetNewestMessages", propertyInfos);
if(ConnectivityReceiver.isConnected()) {
- BeWoLog.writeToLogFile("LoginCallback ist mit dem Internet verbunden. (updateContactlist)");
+ BeWoLog.writeToLogFile("LoginCallback ist mit dem Internet verbunden. (updateContactlist -> isConnected(✓) -> IntervallCheck(x) -> isConnected(✓))");
+
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
BeWoLog.writeToLogFile("LoginCallback ");
spiceManager.execute(request, new JsonSoapPrimitiveRequestListenerForNewestMessages());
+ } else {
+ BeWoLog.writeToLogFile("LoginCallback ist mit dem Internet verbunden. (updateContactlist -> isConnected(✓) -> IntervallCheck(x) -> isConnected(✓) -> IntervallCheck(x)");
}
} else {
- BeWoLog.writeToLogFile("LoginCallback ist nicht mit dem Internet verbunden. (updateContactlist)");
-// SocketManager.shutDownConnectionToServer("KontaktChatActivity->");
- SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
+ //TODO: Das ist irgendwie sinnlos, wenn keine Verbindung zum Internet besteht...
+ BeWoLog.writeToLogFile("LoginCallback ist nicht mit dem Internet verbunden. (updateContactlist -> isConnected(✓) -> IntervallCheck(x) -> isConnected(x))");
+
+ SocketManager.loginCallbackAfterConnectionLost = new Callback() {
@Override
public void doCallback() {
- BeWoLog.writeToLogFile("loginCallbackAfterConnectionLost im normalen LoginCallback aufgerufen, weil offline. (updateContactlist)");
+ BeWoLog.writeToLogFile("loginCallbackAfterConnectionLost im normalen LoginCallback aufgerufen, weil offline. (updateContactlist -> isConnected(✓) -> IntervallCheck(x) -> isConnected(x))");
spiceManager.execute(request, new JsonSoapPrimitiveRequestListenerForNewestMessages());
}
};
@@ -387,10 +413,17 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
runOnUiThread(new Runnable() {
@Override
public void run() {
- KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
+ KontaktAdapter ka = ((KontaktAdapter) listView.getAdapter());
+
+ int onlineEntitiesCount = SocketManager.onlineEntities.size();
+ int onlinePersonOidsCount = SocketManager.onlinePersonOids.size();
+
+ Log.i(LOGTAG, "onlineEntities: " + onlineEntitiesCount + "; onlinePersonOids: " + onlinePersonOidsCount);
for(ContactListItem item : ka.values) {
- item.isOnline = SocketManager.onlinePersonOids.contains(item.getPersonOid());
+ if(!item.isTeam) {
+ item.isOnline = SocketManager.onlinePersonOids.contains(item.getPersonOid());
+ }
}
ka.notifyDataSetChanged();
@@ -599,11 +632,11 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
}
}
- private final class JsonSoapPrimitiveRequestListener implements RequestListener {
+ private final class JsonSoapPrimitiveContactsRequestListener implements RequestListener {
OnRequestSuccessCallback callback;
- JsonSoapPrimitiveRequestListener(OnRequestSuccessCallback callback) {
+ JsonSoapPrimitiveContactsRequestListener(OnRequestSuccessCallback callback) {
this.callback = callback;
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
index 0234bf04a..a9672d017 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
@@ -48,7 +48,7 @@ import soapConnection.ApplicationUser;
import soapConnection.JsonSoapPrimitiveRequest;
import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
-import tcpConnection.LoginCallback;
+import tcpConnection.Callback;
import tcpConnection.SocketManager;
import util.BeWoLog;
import util.SecurityUtils;
@@ -76,7 +76,7 @@ public class LoginActivity extends ActionBarActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
- SocketManager.connectionFailureCallback = new LoginCallback() {
+ SocketManager.connectionFailureCallback = new Callback() {
@Override
public void doCallback() {
runOnUiThread(new Runnable() {
@@ -89,7 +89,7 @@ public class LoginActivity extends ActionBarActivity {
}
};
- SocketManager.sendFailureCallback = new LoginCallback() {
+ SocketManager.sendFailureCallback = new Callback() {
@Override
public void doCallback() {
runOnUiThread(new Runnable() {
@@ -262,13 +262,13 @@ public class LoginActivity extends ActionBarActivity {
// return;
// }
- ArrayList propertyInfos = new ArrayList<>();
- propertyInfos.add(SoapConnectionManager.BuildProperty("pTenant", tenant, String.class));
- propertyInfos.add(SoapConnectionManager.BuildProperty("pUsername", username, String.class));
- propertyInfos.add(SoapConnectionManager.BuildProperty("pPassword", password, String.class));
+ ArrayList propertyInfos = new ArrayList<>();
+ propertyInfos.add(SoapConnectionManager.BuildProperty("pTenant", tenant, String.class));
+ propertyInfos.add(SoapConnectionManager.BuildProperty("pUsername", username, String.class));
+ propertyInfos.add(SoapConnectionManager.BuildProperty("pPassword", password, String.class));
- JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.LOGIN_CALL, propertyInfos);
- spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
+ JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.LOGIN_CALL, propertyInfos);
+ spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
// }
// }, new Response.ErrorListener() {
// @Override
@@ -384,7 +384,7 @@ public class LoginActivity extends ActionBarActivity {
SocketManager.tenant = mTenantView.getText().toString();
- SocketManager.initialLoginCallback = new LoginCallback() {
+ SocketManager.initialLoginCallback = new Callback() {
@Override
public void doCallback() {
Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Ist verbunden und ruft die ChatActivity nun auf.");
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 a68e76179..ce26010f2 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MessageAdapter.java
@@ -50,7 +50,7 @@ public class MessageAdapter extends ArrayAdapter {
holder.msg.setText(chatMessage.ChatText);
- if(holder.pending_msg_image != null && chatMessage.ServerseitigeOid != 0) {
+ if(holder.pending_msg_image != null && chatMessage.IsDelivered) {
holder.pending_msg_image.setVisibility(View.INVISIBLE);
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
index 216e20371..20b5ea663 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
@@ -1,6 +1,5 @@
package beyondsoft.bewomitarbeiterapp;
-import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -49,8 +48,9 @@ public class WebdokuActivity extends ActionBarActivity {
case R.id.action_Logout:
SocketManager.logout();
- finish();
- System.exit(0);
+ Intent intent = new Intent(WebdokuActivity.this, LoginActivity.class);
+ WebdokuActivity.this.startActivity(intent);
+
return true;
default:
return super.onOptionsItemSelected(item);
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatMessage.java b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatMessage.java
index 63e5958d8..78df293e9 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatMessage.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatMessage.java
@@ -3,6 +3,7 @@ package entities;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
+import java.util.Objects;
/**
* Created by JettenM on 26.07.2016.
@@ -47,6 +48,63 @@ public class ChatMessage implements Comparable {
return dateFormat.format(InsTs);
}
+ @Override
+ public boolean equals(Object other) {
+ if(other == null || !(other instanceof ChatMessage)) {
+ return false;
+ }
+
+ if(other == this) {
+ return true;
+ }
+
+ ChatMessage om = (ChatMessage) other;
+
+ boolean chatTextsAreEqual = false;
+ if(this.ChatText != null) {
+ chatTextsAreEqual = this.ChatText.equals(om.ChatText);
+ } else {
+ chatTextsAreEqual = om.ChatText == null;
+ }
+
+ boolean messageIdsAreEqual = false;
+ if(this.MessageId != null) {
+ messageIdsAreEqual = this.MessageId.equals(om.MessageId);
+ } else {
+ messageIdsAreEqual = om.MessageId == null;
+ }
+
+ boolean insTsAreEqual = false;
+ if(this.InsTs != null) {
+ insTsAreEqual = InsTs.equals(om.InsTs);
+ } else {
+ insTsAreEqual = om.InsTs == null;
+ }
+
+ boolean sendDatesAreEqual = false;
+ if(this.SendDate != null) {
+ sendDatesAreEqual = SendDate.equals(om.SendDate);
+ } else {
+ sendDatesAreEqual = om.SendDate == null;
+ }
+
+ boolean a = this.Id == om.Id;
+ boolean b = this.SenderPersonOid == om.SenderPersonOid;
+ boolean c = this.RecipientPersonOid == om.RecipientPersonOid;
+ boolean d = insTsAreEqual;
+ boolean e = chatTextsAreEqual;
+ boolean f = this.IsDelivered == om.IsDelivered;
+ boolean g = this.ServerseitigeOid == om.ServerseitigeOid;
+ boolean h = this.IsTeam == om.IsTeam;
+ boolean i = messageIdsAreEqual;
+ boolean j = sendDatesAreEqual;
+
+ boolean areEqual = this.Id == om.Id && this.SenderPersonOid == om.SenderPersonOid && this.RecipientPersonOid == om.RecipientPersonOid && this.InsTs == om.InsTs && chatTextsAreEqual &&
+ this.IsDelivered == om.IsDelivered && this.ServerseitigeOid == om.ServerseitigeOid && this.IsTeam == om.IsTeam && messageIdsAreEqual && this.SendDate == om.SendDate;
+
+ return areEqual;
+ }
+
@Override
public int compareTo(ChatMessage cm) {
if(InsTs == null || cm.InsTs == null) {
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
index 250eda146..6701c41d6 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
@@ -50,7 +50,7 @@ public class Packet {
// die ersten fünf ";" ignorieren
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;ServerseitigeOid;ClientseitigeOid;Tenant;IsEmployee;MessageId;[ClientName][ChatMessage][MessageTimeStamp][IsDelivered]
- //23;281;20;389;1;38;932;[Tenant];1; 10 Semikola
+ //23;281;20;389;1;38;932;[Tenant];1; 9 Semikola
public Packet(String message) {
Log.i("PACKET_CONSTRUCTOR_MSG", message);
@@ -86,7 +86,7 @@ public class Packet {
ChatMessage = actualMessage.substring(chatNameLength, chatMessageLength + chatNameLength);
- String dateString = actualMessage.substring(chatMessageLength + chatNameLength, actualMessage.length() - 1);
+ String dateString = actualMessage.substring(chatMessageLength + chatNameLength, chatMessageLength + chatNameLength + 19);
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.GERMAN);
@@ -123,20 +123,92 @@ public class Packet {
Log.i("PACKET_LOG", prefix + ": SenderPersonOid: " + SenderPersonOid + "\nRecipientPersonOid: " + RecipientPersonOid + "\nChatDataIdentifier: " + ChatDataIdentifier.name() + "\nChatName: " + ChatName + "\nChatMessage: " + ChatMessage + "\nTenant: " + Tenant + "\nIsDelivered: " + IsDelivered + "\nMessageTimeStamp: " + MessageTimeStamp + "\nServerseitigeOid: " + ServerseitigeOid + "\nClientseitigeOid: " + ClientseitigeOid + "\nIsEmployee: " + IsEmployee + "\nMessageId: " + MessageId);
}
-
@Override
public String toString() {
return "SenderPersonOid: " + SenderPersonOid +
- "\nRecipientPersonOid: " + RecipientPersonOid +
- "\nChatDataIdentifier: " + ChatDataIdentifier.name() +
- "\nChatName: " + ChatName +
- "\nChatMessage: " + ChatMessage +
- "\nTenant: " + Tenant +
- "\nIsDelivered: " + IsDelivered +
- "\nMessageTimeStamp: " + MessageTimeStamp +
- "\nServerseitigeOid: " + ServerseitigeOid +
- "\nClientseitigeOid: " + ClientseitigeOid +
- "\nIsEmployee: " + IsEmployee +
- "\nMessageId: " + MessageId;
+ "\n\tRecipientPersonOid: " + RecipientPersonOid +
+ "\n\tChatDataIdentifier: " + ChatDataIdentifier.name() +
+ "\n\tChatName: " + ChatName +
+ "\n\tChatMessage: " + ChatMessage +
+ "\n\tTenant: " + Tenant +
+ "\n\tIsDelivered: " + IsDelivered +
+ "\n\tMessageTimeStamp: " + MessageTimeStamp +
+ "\n\tServerseitigeOid: " + ServerseitigeOid +
+ "\n\tClientseitigeOid: " + ClientseitigeOid +
+ "\n\tIsEmployee: " + IsEmployee +
+ "\n\tMessageId: " + MessageId;
+ }
+
+ public static int analyzingPackets(String packetString) {
+ int packetCount = 0;
+
+
+ String[] gesplittet = packetString.split(";");
+
+ Log.i("PACKET_ANALYZER", "Anzahl Semikola: " + (gesplittet.length - 1));
+ Log.i("PACKET_ANALYZER", "Zu analysierender String: " + packetString);
+
+ //z.B. Header: 11;3;15;17;0;2657;43;demoapp4;1;5a50002f-464b-4763-91e2-d261463477e0;
+
+ // 11;3;15;17;0;2657;43;demoapp4;1;5a50002f-464b-4763-91e2-d261463477e0;Elliot Aldersonnoch eine antwort03.11.2016 14:14:150
+ // 11;3;15;17;0;2657;43;demoapp4;1;5a50002f-464b-4763-91e2-d261463477e0;Elliot Alderson --> 84 Zeichen
+ // noch eine antwort --> 17 Zeichen
+ // 03.11.2016 14:14:150 --> 20 Zeichen --> 84 + 17 + 20 = 121
+
+ int senderPersonOidLength = gesplittet[0].length(); // 2
+ int recipientPersonOidLength = gesplittet[1].length(); // 1
+ int chatNameLength = gesplittet[2].length(); // 2
+ int chatMessageLength = gesplittet[3].length(); // 2
+ int chatIdentifierLength = gesplittet[4].length(); // 1
+ int serverseitigeOidLength = gesplittet[5].length(); // 4
+ int clientseitigeOidLength = gesplittet[6].length(); // 2
+ int tenantLength = gesplittet[7].length(); // 8
+ int isEmployeeLength = gesplittet[8].length(); // 1
+ int messageIdLength = gesplittet[9].length(); // 36
+
+ int headerLength = gesplittet.length - 1 +
+ senderPersonOidLength +
+ recipientPersonOidLength +
+ chatNameLength +
+ chatMessageLength +
+ chatIdentifierLength +
+ serverseitigeOidLength +
+ clientseitigeOidLength +
+ tenantLength +
+ isEmployeeLength +
+ messageIdLength +
+ Integer.parseInt(gesplittet[2]);
+
+ Log.i("PACKET_ANALYZER", "Testausgabe: " + packetString.substring(0, headerLength));
+
+ /*
+ SenderPersonOid = Integer.parseInt(senderPersonOidString);
+ RecipientPersonOid = Integer.parseInt(recipientPersonOidString);
+ ServerseitigeOid = Integer.parseInt(serverseitigeOidString);
+ ClientseitigeOid = Integer.parseInt(clientseitigeOidString);
+ IsEmployee = Integer.parseInt(isEmployeeString) == 1;
+
+
+
+ Logout von Elliot Alderson:
+
+ SenderPersonOid RecipientPersonOid ChatNameLength ChatMessageLength ChatIdentifier ServerseitigeOid ClientseitigeOid Tenant IsEmployee MessageId ChatName TimeStamp IsDelivered
+ 11; 0; 15; 0; 5; 0; 0; ; 1; ; Elliot Alderson 03.11.2016 15:00:05 0
+
+
+
+ */
+
+ int actualChatNameLength = Integer.parseInt(gesplittet[2]); // 15 bei Elliot Alderson
+
+ int actualChatMessageLength = Integer.parseInt(gesplittet[3]);
+ // + 20 -> 19 für den Timestamp und 1 für IsDelivered
+ int firstMessageLength = headerLength + actualChatMessageLength + 20;
+
+ Log.i("PACKET_ANALYZER", "Header-Length: " + headerLength);
+ Log.i("PACKET_ANALYZER", "Länge der ersten Nachricht: " + firstMessageLength);
+ Log.i("PACKET_ANALYZER", "Erste Nachricht: " + packetString.substring(0, firstMessageLength));
+
+ return packetCount;
}
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
index d987f06b3..3ce0d67bf 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
@@ -19,7 +19,7 @@ public class SoapCalls {
public static String TOKEN_CHECK_URL = "https://" + DESTINATION_ADDRESS + "/mobil/main/checktoken?token=";
- public static String WEB_DOKU_URL = "https://" + DESTINATION_ADDRESS + "/mobil/login/demo";
+ public static String WEB_DOKU_URL = "https://app1.bewoplaner.de/mobil/login/1234567890";
public static String WSDL_TARGET_NAME = "bliblablubb.org/";
public static String SOAP_ADDRESS = "https://" + DESTINATION_ADDRESS + "/BeWoPlanerAndroid/AndroidSoapService.asmx";
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/Callback.java
similarity index 74%
rename from Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java
rename to Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/Callback.java
index 00a0c00c8..e16d94ea1 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/Callback.java
@@ -4,6 +4,6 @@ package tcpConnection;
/**
* Created by JettenM on 08.09.2016.
*/
-public interface LoginCallback {
+public interface Callback {
void doCallback();
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
index b5f7ccdab..637e4e767 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
@@ -1,7 +1,6 @@
package tcpConnection;
import android.util.Log;
-import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -44,29 +43,24 @@ public class SocketManager {
private static Thread listenerThread;
private static SocketListener socketListener;
public static UIHandler uiHandler;
- public static LoginCallback loginCallback;
- public static LoginCallback initialLoginCallback;
- public static LoginCallback connectionFailureCallback;
- public static LoginCallback loginCallbackAfterConnectionLost;
- public static LoginCallback sendFailureCallback;
+ public static Callback loginCallback;
+ public static Callback initialLoginCallback;
+ public static Callback connectionFailureCallback;
+ public static Callback loginCallbackAfterConnectionLost;
+ public static Callback sendFailureCallback;
private static DataOutputStream dataOutputStream;
public static ArrayList onlinePersonOids = new ArrayList<>();
public static ArrayList onlineEntities = new ArrayList<>();
public static HashMap notificationEntities = new HashMap<>();
- public static LoginCallback loginCallback2;
- public static LoginCallback socketConnectionFailedCallback;
+ public static Callback loginCallback2;
+ private static Callback socketConnectionFailedCallback;
public static void connectToServer(String herkunft){
BeWoLog.writeToLogFile("connectToServer wird aufgerufen von " + herkunft);
new Thread(new ConnectionOpener()).start();
}
- public static void shutDownConnectionToServer(String herkunft){
- BeWoLog.writeToLogFile("Aufruf von " + herkunft + ". (shutDownConnectionToServer)");
- new Thread(new ConnectionCloser()).start();
- }
-
public static void sendMessage(Packet packet) {
new Thread(new MessageSender(packet.getDataStream())).start();
}
@@ -177,7 +171,7 @@ public class SocketManager {
}
}
- public static void loginOnServer() {
+ private static void loginOnServer() {
if(socket != null && socket.isConnected()) {
try {
Packet packet = new Packet();
@@ -197,29 +191,6 @@ public class SocketManager {
}
}
- public static class ConnectionCloser implements Runnable{
- public void run(){
- try {
- BeWoLog.writeToLogFile("Schließe die Verbindung zum TCP-Server. (ConnectionCloser)");
-
- if (dataOutputStream != null) {
- dataOutputStream.flush();
- dataOutputStream.close();
- } else {
- BeWoLog.writeToLogFile("dataOutputStream ist null. (ConnectionCloser)");
- }
-
- if (socket != null) {
- socket.close();
- }
-
- } catch (IOException se) {
- BeWoChatApplication.writeExceptionToLog(se);
- se.printStackTrace();
- }
- }
- }
-
private static class MessageSender implements Runnable {
byte[] packetToSend;
@@ -238,8 +209,6 @@ public class SocketManager {
if ((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
if(socket != null && dataOutputStream != null) {
try {
- //TODO: mit Versenden der nicht verschickten Nachrichten synchronisieren
-
dataOutputStream.write(packetToSend);
dataOutputStream.flush();
@@ -252,6 +221,7 @@ public class SocketManager {
sentMessage.SendDate = Calendar.getInstance().getTime();
int affectedRows = db.updateChatMessage(sentMessage);
Log.i("MESSAGE_SENDER", "SendDate wurde erfolgreich aktualisiert: " + (affectedRows == 1));
+ BeWoLog.writeToLogFile("SendDate wurde erfolgreich aktualisiert: " + (affectedRows == 1));
}
} catch (IOException e) {
BeWoChatApplication.writeExceptionToLog(e);
@@ -263,12 +233,15 @@ public class SocketManager {
DatabaseHandler db = DatabaseHandler.getInstance(BeWoChatApplication.getInstance().getApplicationContext());
ChatMessage undeliveredMessage = db.getChatMessageById(packet.ClientseitigeOid);
if(undeliveredMessage != null) {
+
+ Log.i(LOGTAG, "Bisheriger Wert von IsDelivered: " + undeliveredMessage.IsDelivered + (undeliveredMessage.IsDelivered ? "" : ". Diese Aktion war unnötig."));
+
undeliveredMessage.IsDelivered = false;
int affectedRows = db.updateChatMessage(undeliveredMessage);
+ BeWoLog.writeToLogFile("Nicht verschickte Nachricht ");
}
}
-// SocketManager.shutDownConnectionToServer("MessageSender->Socket ist nicht erreichbar.");
SocketManager.connectToServer("MessageSender beim gescheiterten Versenden einer Nachricht.");
} catch (UnsupportedEncodingException e1) {
BeWoChatApplication.writeExceptionToLog(e1);
@@ -278,7 +251,6 @@ public class SocketManager {
e.printStackTrace();
}
} else {
-// SocketManager.shutDownConnectionToServer("MessageSender->Socket und/oder OutputStream sind null");
SocketManager.connectToServer("MessageSender. Socket und/oder OutputStream sind null");
}
} else {
@@ -306,7 +278,6 @@ public class SocketManager {
try {
while (isRunning) {
Thread.currentThread().sleep(1000);
- Log.i("SOCKET_MANAGER", "Lausche...");
if (socket != null) {
if (socket.isConnected()) {
@@ -325,6 +296,8 @@ public class SocketManager {
stream.read(message, 0, size);
try {
+ Packet.analyzingPackets(new String(message, "UTF-8"));
+
chatPacket = new Packet(new String(message, "UTF-8"));
} catch(Exception e) {
BeWoChatApplication.writeExceptionToLog(e);
@@ -360,9 +333,11 @@ public class SocketManager {
switch (chatPacket.ChatDataIdentifier) {
case KEEP_ALIVE:
+ BeWoLog.writeToLogFile("KeepAlive-Antwort erhalten. (SocketManger)");
+
break;
case MESSAGE:
- BeWoLog.writeToLogFile("Empfange Nacahricht. (SocketManager)");
+ BeWoLog.writeToLogFile("Empfange Nacahricht(" + chatPacket.MessageId + "). (SocketManager)");
Log.i(LOGTAG, "Empfange Nacahricht");
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false, chatPacket.MessageId));
@@ -370,19 +345,21 @@ public class SocketManager {
break;
case TEAM:
- BeWoLog.writeToLogFile("Empfange Team-Nacahricht. (SocketManager)");
+ BeWoLog.writeToLogFile("Empfange Team-Nacahricht(" + chatPacket.MessageId + "). (SocketManager)");
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true, chatPacket.MessageId));
break;
case MESSAGE_RESPONSE:
- BeWoLog.writeToLogFile("Empfange Zustellbestätigung. (SocketManager)");
+ BeWoLog.writeToLogFile("Empfange Response für Message: " + chatPacket.MessageId + "; (SocketManager)");
ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
- cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
+ cm.MessageId = chatPacket.MessageId;
cm.IsDelivered = true;
- databaseHandler.updateChatMessage(cm);
+ int affectedRows = databaseHandler.updateChatMessage(cm);
+ BeWoLog.writeToLogFile("Durch das Aktualisieren der ChatMessage bei Response betroffene Datensätze: " + affectedRows + ". (SocketManager -> MESSAGE_RESPONSE)");
+
break;
case STATUS_NOTIFICATION_LOGIN:
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt online. (SocketManager)");
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/BeWoLog.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/BeWoLog.java
index 81f392493..d1aadb83b 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/BeWoLog.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/BeWoLog.java
@@ -31,7 +31,7 @@ public class BeWoLog {
File root = android.os.Environment.getExternalStorageDirectory();
- File dir = new File(root.getAbsolutePath() + "/BeWo");
+ File dir = new File(root.getAbsolutePath() + "/" + Util.LOGFILEDIRECTORYNAME);
dir.mkdirs();
File file = new File(dir, Util.LOGFILENAME);
@@ -48,4 +48,16 @@ public class BeWoLog {
ioException.printStackTrace();
}
}
+
+ public static Boolean deleteLogFile() {
+ if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
+ Log.e("BEWOLOG", "Kein externes Speichermedium vorhanden.");
+ return false;
+ }
+
+ File root = android.os.Environment.getExternalStorageDirectory();
+ File logFile = new File(root.getAbsolutePath() + "/" + Util.LOGFILEDIRECTORYNAME + "/" + Util.LOGFILENAME);
+
+ return logFile.delete();
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
index de177ec29..818772d16 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
@@ -12,9 +12,6 @@ import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
-import com.octo.android.robospice.SpiceManager;
-import com.octo.android.robospice.UncachedSpiceService;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -23,16 +20,13 @@ import java.util.Map;
import java.util.Random;
import Database.DatabaseHandler;
+import beyondsoft.bewomitarbeiterapp.BeWoChatApplication;
import beyondsoft.bewomitarbeiterapp.ChatActivity;
+import beyondsoft.bewomitarbeiterapp.ContactListItem;
import beyondsoft.bewomitarbeiterapp.KontaktChatActivity;
import beyondsoft.bewomitarbeiterapp.R;
import entities.ChatEntity;
-import entities.ChatMessage;
import entities.NotificationLog;
-import soapConnection.DataIdentifier;
-import soapConnection.Packet;
-import soapConnection.SoapConnectionManager;
-import tcpConnection.LoginCallback;
import tcpConnection.SocketManager;
/**
@@ -48,15 +42,23 @@ public class Util {
public static final String PREFS_USERNAME_KEY = "username";
public static final String PREFS_PASSWORD = "password";
- public static final String NOTIFICATION_CANCELLED = "notification_cancelled";
+ public static final String PREFS_FIRST_RUN_KEY = "firstRunKey";
- public static int conversationsCount = 0;
+ static final String NOTIFICATION_CANCELLED = "notification_cancelled";
- public static HashMap entity2MessagesCountRel = new HashMap<>();
+ static String LOGFILENAME = "BeWoLog.txt";
+ static String LOGFILEDIRECTORYNAME = "BeWo";
+
+ static int conversationsCount = 0;
+
+ private static HashMap entity2MessagesCountRel = new HashMap<>();
//TODO: Notifications zählen. Bei Nachrichten verschiedener Unterhaltungen nur noch eine kleine Notification anzeigen mit "Sie haben x Nachrichten in y Unterhaltungen
public static void SetNotify(String username, String message, int recipientOid, boolean isTeam, String teamMemberOids, String teamMemberNames, boolean isEmployee, Context packageContext) {
- int unreadMessagesCount = entity2MessagesCountRel.size() + 1;
+ ChatEntity chatEntity = new ChatEntity(recipientOid, isTeam, isEmployee);
+ updateMessagesCount(chatEntity, 1);
+
+ int unreadMessagesCount = entity2MessagesCountRel.get(chatEntity);
if(SocketManager.notificationEntities.keySet().size() >= 1) {
conversationsCount = SocketManager.notificationEntities.keySet().size();
@@ -100,13 +102,6 @@ public class Util {
Random random = new Random();
int notificationId = 1;
- ChatEntity chatEntity = new ChatEntity(recipientOid, isTeam, isEmployee);
-
-
-
- // TODO: in entity2MessagesCountRels einfügen und Anzahl der Nachrichten aktualisieren
- updateMessagesCount(chatEntity, 1);
-
NotificationLog notificationLog = new NotificationLog(notificationId, Calendar.getInstance().getTime());
@@ -135,7 +130,7 @@ public class Util {
mNotifyMgr.notify(notificationId, mBuilder.build());
}
- protected static PendingIntent getDeletedIntent(Context context, int recipientOid, boolean isTeam) {
+ private static PendingIntent getDeletedIntent(Context context, int recipientOid, boolean isTeam) {
Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
intent.setAction(Util.NOTIFICATION_CANCELLED);
@@ -174,13 +169,21 @@ public class Util {
}
private static void updateMessagesCount(ChatEntity entity, int value2add) {
+ ContactListItem cli = DatabaseHandler.getInstance(BeWoChatApplication.getInstance()).getContactByPersonOid(Long.valueOf(entity.getOid()).intValue(), entity.getIsTeam());
+ BeWoLog.writeToLogFile("Aktualisiere die Anzahl der ungelesenen Nachrichten von " + cli.getChatName() + " (updateMessagesCount)");
+
int newValue = value2add;
if(entity2MessagesCountRel.containsKey(entity)) {
+ BeWoLog.writeToLogFile("Der Chatpartner ist in der Liste der ungelesenen Nachrichten vorhanden. (updateMessagesCount)");
newValue = entity2MessagesCountRel.get(entity) + value2add;
+ BeWoLog.writeToLogFile("Alter Wert: " + entity2MessagesCountRel.get(entity) + ". Wert, der addiert wird: " + value2add + ". Neuer Wert: " + newValue + " (updateMessagesCount)");
+ } else {
+ BeWoLog.writeToLogFile("Der Chatpartner ist nicht in der Liste der ungelesenen Nachrichten vorhanden. (updateMessagesCount)");
}
entity2MessagesCountRel.put(entity, newValue);
+ BeWoLog.writeToLogFile("Jetzt in der Liste: " + entity2MessagesCountRel.get(entity) + ". (updateMessagesCount)");
}
public static void removeMessagesCount(ChatEntity entity) {
@@ -209,6 +212,4 @@ public class Util {
public static boolean contains(final Integer[] array, final int key) {
return Arrays.asList(array).contains(key);
}
-
- public static String LOGFILENAME = "BeWoLog.txt";
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable-xxhdpi-v11/statusteam.png b/Android/BewoMitarbeiterApp/app/src/main/res/drawable-xxhdpi-v11/statusteam.png
new file mode 100644
index 000000000..ac09b4f8e
Binary files /dev/null and b/Android/BewoMitarbeiterApp/app/src/main/res/drawable-xxhdpi-v11/statusteam.png differ
diff --git a/BeWoChatServer/Server.cs b/BeWoChatServer/Server.cs
index 98d16cbc4..6c4e3aba1 100644
--- a/BeWoChatServer/Server.cs
+++ b/BeWoChatServer/Server.cs
@@ -147,6 +147,21 @@ namespace BeWoChatServer
switch(dataPacket.DataIdentifier) {
case DataIdentifier.KeepAlive:
+ //spiele Ping-Pong
+
+ var keepAlivePacket = new Packet(
+ dataPacket.Socket,
+ dataPacket.ClientName,
+ dataPacket.SenderPersonOid,
+ 0,
+ dataPacket.IsEmployee)
+ {
+ DataIdentifier = DataIdentifier.KeepAlive,
+ Tenant = dataPacket.Tenant
+ };
+
+ dataPacket.Socket.Send(keepAlivePacket.GetDataStream());
+
break;
case DataIdentifier.Login:
@@ -332,7 +347,11 @@ namespace BeWoChatServer
Console.WriteLine("Konnte den Client nicht aus der Liste entfernen.");
}
- var notificationPacketLogout = new Packet(dataPacket.Socket, dataPacket.ClientName, dataPacket.SenderPersonOid, 0, dataPacket.IsEmployee) {DataIdentifier = DataIdentifier.StatusNotificationLogout};
+ var notificationPacketLogout = new Packet(dataPacket.Socket, dataPacket.ClientName, dataPacket.SenderPersonOid, 0, dataPacket.IsEmployee)
+ {
+ DataIdentifier = DataIdentifier.StatusNotificationLogout,
+ Tenant = dataPacket.Tenant
+ };
Console.WriteLine(DateTime.Now + ": Sende Logout von " + dataPacket.ClientName + " an alle anderen Clients");
foreach (var client in clientList.Where(w => !w.Value.PersonOid.Equals(dataPacket.SenderPersonOid)))
@@ -459,7 +478,7 @@ namespace BeWoChatServer
var sender = dataPacket.Socket;
- var notificationPacketLogout = new Packet(dataPacket.Socket, dataPacket.ClientName, dataPacket.SenderPersonOid, 0, dataPacket.IsEmployee) { DataIdentifier = DataIdentifier.StatusNotificationLogout };
+ var notificationPacketLogout = new Packet(dataPacket.Socket, dataPacket.ClientName, dataPacket.SenderPersonOid, 0, dataPacket.IsEmployee) { DataIdentifier = DataIdentifier.StatusNotificationLogout, Tenant = dataPacket.Tenant};
try
{
diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs
index 4c603b1de..04e11b93a 100644
--- a/Data/Access/SearchDAO.cs
+++ b/Data/Access/SearchDAO.cs
@@ -1676,7 +1676,7 @@ namespace BeWo.Data.Access
public IEnumerable FindNewestChatMessages(long pRecipientPersonOid)
{
var query2 = Session.CreateSQLQuery(string.Format("SELECT MAX({0}) FROM chatmessages WHERE ({1} = {2} OR {3} = {2}) AND {4} IS NULL OR {4} IS NOT NULL AND {1} IN (SELECT t.{0} FROM Team t JOIN employee2team e ON e.{4} = t.{0}) GROUP BY {1}, {3}",
- BeWoEntityBase.PropertyName_Oid, ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientPersonOid, ChatMessage.PropertyName_SenderPersonOid, "TeamOid"));
+ BeWoEntityBase.PropertyName_Oid, ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientPersonOid, ChatMessage.PropertyName_SenderPersonOid, "TeamOid", BeWoEntityBase.PropertyName_InsTs));
var result = query2.List();