Änderungen von bis zur Messe eingecheckt

This commit is contained in:
staccatomamba
2016-11-03 15:26:12 +01:00
parent c640f416f1
commit 9db29abcf0
19 changed files with 534 additions and 245 deletions

View File

@@ -84,6 +84,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3/jars" />

View File

@@ -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<ChatMessage> getUnsentChatMessages() {
BeWoLog.writeToLogFile("Lade unverschickte Nachrichten aus der Datenbank. (getUnsentMessages)");
ArrayList<ChatMessage> 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<ChatMessage> getChatMessagesByMessageIds(ArrayList<String> messageIds) {
String abc = "";
for(String mid : messageIds) {
abc += messageIds;
if(messageIds.indexOf(mid) != (messageIds.size() - 1)) {
abc += "\n";
}
}
BeWoLog.writeToLogFile(abc);
ArrayList<ChatMessage> 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));
}

View File

@@ -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<String> messageIdsWithoutResponse;
public JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener(ArrayList<String> 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<String> 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<ChatMessage> messages2send = databaseHandler.getChatMessagesByMessageIds(result);
ArrayList<ChatMessage> 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<ChatMessage> 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<ChatMessage> unsentMessages = databaseHandler.getUnsentChatMessages();
ArrayList<ChatMessage> 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<String> 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<PropertyInfo> 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();
}

View File

@@ -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<ChatMessage> 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<SoapPrimitive> {
public LoginCallback corruptedRequestCallback;
Callback corruptedRequestCallback;
public JsonSoapPrimitiveRequestListener(LoginCallback corruptedRequestCallback) {
JsonSoapPrimitiveRequestListener(Callback corruptedRequestCallback) {
this.corruptedRequestCallback = corruptedRequestCallback;
}

View File

@@ -53,32 +53,34 @@ public class KontaktAdapter extends ArrayAdapter<ContactListItem> {
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<ContactListItem> {
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;
}

View File

@@ -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<SoapPrimitive> {
private final class JsonSoapPrimitiveContactsRequestListener implements RequestListener<SoapPrimitive> {
OnRequestSuccessCallback callback;
JsonSoapPrimitiveRequestListener(OnRequestSuccessCallback callback) {
JsonSoapPrimitiveContactsRequestListener(OnRequestSuccessCallback callback) {
this.callback = callback;
}

View File

@@ -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<PropertyInfo> 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<PropertyInfo> 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.");

View File

@@ -50,7 +50,7 @@ public class MessageAdapter extends ArrayAdapter<ChatMessage> {
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);
}

View File

@@ -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);

View File

@@ -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<ChatMessage> {
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) {

View File

@@ -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;
}
}

View File

@@ -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";

View File

@@ -4,6 +4,6 @@ package tcpConnection;
/**
* Created by JettenM on 08.09.2016.
*/
public interface LoginCallback {
public interface Callback {
void doCallback();
}

View File

@@ -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<Integer> onlinePersonOids = new ArrayList<>();
public static ArrayList<ChatEntity> onlineEntities = new ArrayList<>();
public static HashMap<ChatEntity, NotificationLog> 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)");

View File

@@ -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();
}
}

View File

@@ -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<ChatEntity, Integer> entity2MessagesCountRel = new HashMap<>();
static String LOGFILENAME = "BeWoLog.txt";
static String LOGFILEDIRECTORYNAME = "BeWo";
static int conversationsCount = 0;
private static HashMap<ChatEntity, Integer> 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";
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

View File

@@ -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
{

View File

@@ -1676,7 +1676,7 @@ namespace BeWo.Data.Access
public IEnumerable<ChatMessage> 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<long>();