diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml
index 08afa4ee3..fb99e4f6e 100644
--- a/Android/BewoMitarbeiterApp/app/app.iml
+++ b/Android/BewoMitarbeiterApp/app/app.iml
@@ -64,14 +64,6 @@
-
-
-
-
-
-
-
-
@@ -80,6 +72,14 @@
+
+
+
+
+
+
+
+
@@ -96,7 +96,6 @@
-
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 45f26ba89..e26e05879 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
@@ -1,5 +1,7 @@
package beyondsoft.bewomitarbeiterapp;
+import android.app.NotificationManager;
+import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -44,9 +46,12 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import Database.DatabaseHandler;
+import entities.ChatEntity;
import entities.ChatMessage;
+import entities.NotificationLog;
import soapConnection.DataIdentifier;
import soapConnection.JsonSoapPrimitiveRequest;
import soapConnection.Packet;
@@ -88,9 +93,6 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
- //TODO: Socket neustarten
- // Broken Pipe, weil die Internetverbindung abgerissen ist
-
Util.reconnectWithServer(isConnected, ChatActivity.this);
}
@@ -125,8 +127,6 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
teamMemberOids = zielkorb.getString("TeamMemberOids");
teamMemberNames = zielkorb.getString("TeamMemberNames");
- Log.i(LOGTAG, "onCreate aufgerufen");
-
ReloadChatView(recipientName, recipientPersonOid, bildArray, isTeam, teamMemberOids, teamMemberNames);
}
@@ -140,7 +140,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
teamMemberNames = pTeamMemberNames;
ImageView status = (ImageView) mCustomView.findViewById(R.id.status);
- TextView titlename = (TextView) mCustomView.findViewById(R.id.PersonalName);
+ TextView titlename = (TextView) mCustomView.findViewById(R.id.PersonalName);
ImageView titlepic = (ImageView) mCustomView.findViewById(R.id.PersonalPic);
if(!isTeam) {
@@ -294,6 +294,16 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos);
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
+
+
+ NotificationManager mNotifyMgr = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
+
+ ChatEntity entity = new ChatEntity(recipientOid, isTeam);
+
+ if(SocketManager.notificationEntities.get(entity) != null) {
+ mNotifyMgr.cancel(SocketManager.notificationEntities.get(entity).getNotificationId());
+ Util.removeMessagesCount(entity);
+ }
}
@Override
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 cd618317c..be53bbd38 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
@@ -1,6 +1,5 @@
package beyondsoft.bewomitarbeiterapp;
-import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -31,7 +30,6 @@ import java.util.ArrayList;
import java.util.List;
import Database.DatabaseHandler;
-import entities.ChatMessage;
import entities.ChatPerson;
import soapConnection.JsonSoapPrimitiveRequest;
import soapConnection.Packet;
@@ -47,11 +45,11 @@ import util.Util;
*/
public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener {
+ private static final String LOGTAG = "";
+
private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class);
private DatabaseHandler databaseHandler;
-// private UIHandler kontaktChatUIHandler;
-
public static ListView listView;
ArrayList contactList = new ArrayList<>();
@@ -110,6 +108,32 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos);
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
+
+
+
+
+
+// ArrayList test = isTeam ? databaseHandler.getExistingTeamChatMessageIds() : databaseHandler.getExistingChatMessageIds();
+//
+// Log.i(LOGTAG, "Chat-Messages in der Datenbank: " + test.size());
+//
+// String pExceptions = "";
+// for(int i = 0; i < test.size(); i++) {
+// pExceptions += test.get(i);
+//
+// if(i < test.size() - 1) {
+// pExceptions += ";";
+// }
+// }
+//
+// ArrayList propertyInfos2 = new ArrayList<>();
+// propertyInfos.add(SoapConnectionManager.BuildProperty("pSenderPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class));
+// propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", recipientPersonOid, Long.class));
+// propertyInfos.add(SoapConnectionManager.BuildProperty("pExceptions", pExceptions, String.class));
+// propertyInfos.add(SoapConnectionManager.BuildProperty("pIsForTeam", isTeam, Boolean.class));
+//
+// JsonSoapPrimitiveRequest request2 = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos);
+// spiceManager.execute(request2, new JsonSoapPrimitiveRequestListenerForUnreadMessages());
}
public UIHandler kontaktChatActivityUIHandler = new UIHandler() {
@@ -163,7 +187,6 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
});
break;
case STATUS_NOTIFICATION_LOGIN_BROADCAST:
-
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -254,11 +277,22 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
spiceManager.start(this);
}
+ @Override
+ public void onBackPressed()
+ {
+ SocketManager.logout();
+
+ Intent intent = new Intent(KontaktChatActivity.this, LoginActivity.class);
+ KontaktChatActivity.this.startActivity(intent);
+
+ super.onBackPressed();
+ }
+
private final class JsonSoapPrimitiveRequestListener implements RequestListener {
@Override
public void onRequestFailure(SpiceException spiceException) {
- Toast.makeText(KontaktChatActivity.this, "An error occured while loading the contact list", Toast.LENGTH_SHORT).show();
+ Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der Kontaktliste aufgetreten.", Toast.LENGTH_SHORT).show();
}
@Override
@@ -313,4 +347,21 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
((KontaktAdapter) listView.getAdapter()).notifyDataSetChanged();
}
}
+
+ private final class JsonSoapPrimitiveRequestListenerForUnreadMessages implements RequestListener {
+ @Override
+ public void onRequestFailure(SpiceException spiceException) {
+ Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der ungelesenen Nachrichten aufgetreten.", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onRequestSuccess(SoapPrimitive soapPrimitive) {
+ //TODO: Nachrichten, die empfangen wurden als man offline war, laden und jeweils die neueste anzeigen.
+ if(soapPrimitive == null) {
+ Log.i("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!");
+ }
+
+ Gson gson = new GsonBuilder().create();
+ }
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java
index 5a8a8d0a2..a524f6ce5 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java
@@ -19,4 +19,26 @@ public class ChatEntity {
public boolean isTeam() {
return isTeam;
}
+
+ @Override
+ public boolean equals(Object other) {
+ if(other == null || !(other instanceof ChatEntity)) {
+ return false;
+ }
+
+ if(other == this) {
+ return true;
+ }
+
+ ChatEntity otherEntity = (ChatEntity) other;
+
+ return this.oid == otherEntity.getOid() && this.isTeam == otherEntity.isTeam();
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (oid ^ (oid >>> 32));
+ result = 31 * result + (isTeam ? 1 : 0);
+ return result;
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
index a04fef882..88c0397b0 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
@@ -18,7 +18,6 @@ import java.util.TimerTask;
import Database.DatabaseHandler;
import beyondsoft.bewomitarbeiterapp.BeWoChatApplication;
-import beyondsoft.bewomitarbeiterapp.R;
import entities.ChatEntity;
import entities.ChatMessage;
import entities.NotificationLog;
@@ -26,6 +25,8 @@ import entities.NotificationLog;
import soapConnection.DataIdentifier;
import soapConnection.Packet;
import soapConnection.SoapCalls;
+import soapConnection.SoapConnectionManager;
+import util.Util;
/**
* Created by JettenM on 04.08.2016.
@@ -188,10 +189,6 @@ public class SocketManager {
private volatile boolean isRunning = true;
- public void terminate() {
- isRunning = false;
- }
-
@Override
public void run() {
try {
@@ -213,6 +210,7 @@ public class SocketManager {
try {
chatPacket = new Packet(new String(message, "UTF-8"));
+ Log.i("SOCKET_LISTENER", "Erstelle Packet; " + (chatPacket.ChatMessage.isEmpty() ? "<>" : chatPacket.ChatMessage) + "; Typ: " + chatPacket.ChatDataIdentifier + ": " + new String(message, "UTF-8"));
} catch(Exception e) {
e.printStackTrace();
}
@@ -251,6 +249,30 @@ public class SocketManager {
SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
}
+ //if(!SocketManager.onlineEntities.)
+
+ /*
+ for(Map.Entry entry : SocketManager.notificationEntities.entrySet()) {
+ if(!(entry.getKey().equals(chatEntity) && entry.getValue().equals(notificationLog))) {
+ mNotifyMgr.cancel(entry.getValue().getNotificationId());
+ entities2remove.add(entry.getKey());
+ }
+ }
+ */
+
+ boolean isAlreadyLoggedIn = false;
+ for(ChatEntity entity : SocketManager.onlineEntities)
+ {
+ if(entity.getOid() == chatPacket.SenderPersonOid) {
+ isAlreadyLoggedIn = true;
+ break;
+ }
+ }
+
+ if(!isAlreadyLoggedIn) {
+ SocketManager.onlineEntities.add(new ChatEntity(chatPacket.SenderPersonOid, false));
+ }
+
break;
case STATUS_NOTIFICATION_LOGOUT:
@@ -258,6 +280,10 @@ public class SocketManager {
SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
}
+ ChatEntity entity2delete = Util.getChatEntityFromOnlineEntitiesByOid(chatPacket.SenderPersonOid, chatPacket.ChatDataIdentifier == DataIdentifier.TEAM);
+
+ SocketManager.onlineEntities.remove(entity2delete);
+
break;
case STATUS_NOTIFICATION_LOGIN_BROADCAST:
@@ -265,7 +291,12 @@ public class SocketManager {
String[] onlinePersons = chatPacket.ChatMessage.split(",");
for (String onlinePerson : onlinePersons) {
- SocketManager.onlinePersonOids.add(Integer.parseInt(onlinePerson));
+
+ int personOid = Integer.parseInt(onlinePerson);
+
+ if(!SocketManager.onlinePersonOids.contains(personOid)) {
+ SocketManager.onlinePersonOids.add(personOid);
+ }
}
break;
@@ -319,4 +350,4 @@ public class SocketManager {
return "02:00:00:00:00:00";
}
-}
+}
\ No newline at end of file
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
index 5949fe0cf..869de1d4d 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
@@ -1,7 +1,5 @@
package util;
-import android.util.Log;
-
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
@@ -20,6 +18,8 @@ import entities.ChatMessage;
* Created by JettenM on 09.08.2016.
*/
public class ChatMessageDeserializer implements JsonDeserializer {
+ private static final String LOGTAG = "MESSAGE_DESERIALIZER";
+
@Override
public ChatMessage deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
@@ -31,6 +31,7 @@ public class ChatMessageDeserializer implements JsonDeserializer {
int recipientPersonOid = Long.valueOf(json.get("EmpfängerPersonOid").getAsLong()).intValue();
int serverseitigeOid = Long.valueOf(json.get("Oid").getAsLong()).intValue();
String chatText = json.get("ChatText").getAsString();
+
boolean isDelivered = json.get("IsDelivered").getAsBoolean();
boolean isTeam = !json.get("TeamOid").isJsonNull();
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java
index 0909af00f..ba1f8a40d 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java
@@ -3,8 +3,12 @@ package util;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.util.Log;
+import entities.ChatEntity;
+import tcpConnection.SocketManager;
+
/**
* Created by JettenM on 09.09.2016.
*/
@@ -17,10 +21,14 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
{
Log.i("NOTIFICATION_CANCELLED", "Benachrichtigung gelöscht");
- // nicht?
- //Util.unreadMessagesCount--;
+ Bundle extras = intent.getExtras();
+ int recipientOid = extras.getInt("RecipientOid");
+ boolean isTeam = extras.getBoolean("IsTeam");
- //TODO: auf die Konversationen achten
+ Util.removeMessagesCount(new ChatEntity(recipientOid, isTeam));
+
+ Util.conversationsCount = 0;
+ SocketManager.notificationEntities.clear();
}
}
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
index db23b1cb1..f3ae7d4c9 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
@@ -12,9 +12,9 @@ import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
-import java.net.Socket;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@@ -46,14 +46,20 @@ public class Util {
public static final String NOTIFICATION_CANCELLED = "notification_cancelled";
- public static int unreadMessagesCount = 0;
+ //public static int unreadMessagesCount = 0;
public static int conversationsCount = 0;
+ public 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, Context packageContext) {
- unreadMessagesCount++;
+ int unreadMessagesCount = entity2MessagesCountRel.size() + 1;
//TODO: unterscheiden, ob es sich um eine einzelne Benachrichtigung handelt
+ if(SocketManager.notificationEntities.keySet().size() >= 1) {
+ conversationsCount = SocketManager.notificationEntities.keySet().size();
+ }
+
String mUsername = conversationsCount > 1 ? String.valueOf(conversationsCount) + " Konversationen" : username;
String mMessage = unreadMessagesCount > 1 ? String.valueOf(unreadMessagesCount) + " Nachrichten" : message;
@@ -85,13 +91,20 @@ public class Util {
NotificationManager mNotifyMgr = (NotificationManager) packageContext.getSystemService(Context.NOTIFICATION_SERVICE);
- mBuilder.setDeleteIntent(getDeletedIntent(packageContext));
+ mBuilder.setDeleteIntent(getDeletedIntent(packageContext, recipientOid, isTeam));
mBuilder.setContentIntent(resultPendingIntent);
Random random = new Random();
int notificationId = 1;
- ChatEntity chatEntity = new ChatEntity(SoapConnectionManager.User.getPersonOid(), isTeam);
+ ChatEntity chatEntity = new ChatEntity(recipientOid, isTeam);
+
+
+
+ // TODO: in entity2MessagesCountRels einfügen und Anzahl der Nachrichten aktualisieren
+ updateMessagesCount(chatEntity, 1);
+
+
NotificationLog notificationLog = new NotificationLog(notificationId, Calendar.getInstance().getTime());
while(SocketManager.notificationEntities.containsValue(notificationLog)) {
@@ -101,11 +114,9 @@ public class Util {
SocketManager.notificationEntities.put(chatEntity, notificationLog);
- //TODO: alte Notifications löschen ---------------------------------
ArrayList entities2remove = new ArrayList<>();
if(conversationsCount > 1 || unreadMessagesCount > 1) {
- //TODO: differenzieren, welche Notifications gelöscht werden müssen. Alle bis auf die aktuelle Benachrichtigungen löschen.
for(Map.Entry entry : SocketManager.notificationEntities.entrySet()) {
if(!(entry.getKey().equals(chatEntity) && entry.getValue().equals(notificationLog))) {
mNotifyMgr.cancel(entry.getValue().getNotificationId());
@@ -113,15 +124,23 @@ public class Util {
}
}
}
- //TODO: ------------------------------------------------------------
+
+ for(ChatEntity entry : entities2remove) {
+ SocketManager.notificationEntities.remove(entry);
+ }
mNotifyMgr.notify(notificationId, mBuilder.build());
}
- protected static PendingIntent getDeletedIntent(Context context) {
+ protected static PendingIntent getDeletedIntent(Context context, int recipientOid, boolean isTeam) {
Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
intent.setAction(Util.NOTIFICATION_CANCELLED);
+ Bundle extras = new Bundle();
+ extras.putInt("RecipientOid", recipientOid);
+ extras.putBoolean("IsTeam", isTeam);
+ intent.putExtras(extras);
+
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}
@@ -200,4 +219,30 @@ public class Util {
thread.start();
}
+
+ public static ChatEntity getChatEntityFromOnlineEntitiesByOid(int personOid, boolean isTeam) {
+ for(ChatEntity item : SocketManager.onlineEntities) {
+ if(item.getOid() == personOid && item.isTeam() == isTeam) {
+ return item;
+ }
+ }
+
+ return null;
+ }
+
+ private static void updateMessagesCount(ChatEntity entity, int value2add) {
+ int newValue = value2add;
+
+ if(entity2MessagesCountRel.containsKey(entity)) {
+ newValue = entity2MessagesCountRel.get(entity) + value2add;
+ }
+
+ entity2MessagesCountRel.put(entity, newValue);
+ }
+
+ public static void removeMessagesCount(ChatEntity entity) {
+ if(entity2MessagesCountRel.containsKey(entity)) {
+ entity2MessagesCountRel.remove(entity);
+ }
+ }
}
diff --git a/BeWoChatServer/Server.cs b/BeWoChatServer/Server.cs
index 6f5f1a6fe..ba23b5564 100644
--- a/BeWoChatServer/Server.cs
+++ b/BeWoChatServer/Server.cs
@@ -268,7 +268,6 @@ namespace BeWoChatServer
Console.WriteLine(DateTime.Now + ": Speichere die Chat-Nachricht in die Datenbank");
DAOFactory.GenericDAO.Insert(chatMessage);
- // Testweise die Id einfügen
if(chatMessage.Oid != null)
{
Console.WriteLine(DateTime.Now + ": Chat-Nachricht erfolgreich mit Oid " + chatMessage.Oid.Value + " gespeichert");
@@ -338,7 +337,7 @@ namespace BeWoChatServer
var chatMessage = new ChatMessage
{
SenderPersonOid = dataPacket.SenderPersonOid,
- ChatText = System.Text.Encoding.Default.GetBytes(dataPacket.ChatMessage),
+ ChatText = Encoding.Default.GetBytes(dataPacket.ChatMessage),
EmpfängerPersonOid = dataPacket.RecipientPersonOid,
Uhrzeit = dataPacket.MessageTimeStamp,
InsUser = dataPacket.ClientName,
@@ -403,6 +402,26 @@ namespace BeWoChatServer
var asfdabc = dataPacket.ChatMessage;
+ break;
+
+ case DataIdentifier.MessageResponseToServer:
+
+ try
+ {
+ Monitor.Enter(_Lock);
+
+ DefaultHibernateSessionManager.CurrentTenant = dataPacket.Tenant;
+
+ var message = DAOFactory.GenericDAO.LoadByID(dataPacket.ServerseitigeOid);
+ message.IsDelivered = true;
+
+ DAOFactory.GenericDAO.Update(message);
+ }
+ finally
+ {
+ Monitor.Exit(_Lock);
+ }
+
break;
}
diff --git a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
index 54affe1fb..1035d0e38 100644
--- a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
+++ b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
@@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using System.Text;
using System.Web.Services;
using BeWo.Data.Access;
+using BeWo.Service.DCEntityMapper;
using BeWo.Service.ServiceContracts;
using BeWo.Service.ServiceImplementations;
@@ -94,13 +96,37 @@ namespace BeWoPlanerAndroid
exceptions = splittedString.Select(item => Convert.ToInt64(item)).ToList();
}
- var messages = DAOFactory.SearchDAO.FindAllChatMessagesForAndroid(pSenderPersonOid, pRecipientPersonOid, exceptions, pIsForTeam);
+ var jsonMessages = new List();
- messages.DoForEach(m => Debug.WriteLine("Team: " + (m.TeamOid == null ? "Nein" : m.TeamOid.Value.ToString()) + "; Text: " + m.ChatText));
+ var messages = DAOFactory.SearchDAO.FindAllChatMessagesForAndroid(pSenderPersonOid, pRecipientPersonOid, exceptions, pIsForTeam).DoForEach(dfe => jsonMessages.Add(new ChatMessageForJson(dfe.EmpfängerPersonOid, dfe.SenderPersonOid, dfe.IsDelivered, dfe.IstGelesen, dfe.TeamOid, dfe.ChatText, dfe.Uhrzeit, dfe.Oid, dfe.InsTs)));
- return JsonConvert.SerializeObject(messages);
+ //messages.DoForEach(d => Debug.WriteLine("ChatText: " + Encoding.UTF8.GetString(d.ChatText) + "; ByteArray: " + d.ChatText.ToString()));
+
+ foreach(var item in messages)
+ {
+ var str = "";
+ item.ChatText.DoForEach(d => str += d.ToString() + ",");
+
+ var abc = MapperFactory.ChatMessagesDC_ChatMessages.MapToNewDC(item);
+
+ Debug.WriteLine("UTF-8: " + Encoding.UTF8.GetString(item.ChatText)
+ + "\nASCII: " + Encoding.ASCII.GetString(item.ChatText)
+ + "\nUTF-7: " + Encoding.UTF7.GetString(item.ChatText)
+ + "\nBigEndianUnicode: " + Encoding.BigEndianUnicode.GetString(item.ChatText)
+ + "\nUTF-32: " + Encoding.UTF32.GetString(item.ChatText));
+ }
+
+ //jsonMessages.DoForEach(m => Debug.WriteLine("Team: " + (m.TeamOid == null ? "Nein" : m.TeamOid.Value.ToString()) + "; Text: " + m.ChatText));
+
+ return JsonConvert.SerializeObject(jsonMessages);
}
+ //[WebMethod(EnableSession = true)]
+ //public string GetAllUnreadMessages()
+ //{
+
+ //}
+
[WebMethod(EnableSession = true)]
public string GetServerAddressByToken(string pToken)
{
@@ -186,5 +212,31 @@ namespace BeWoPlanerAndroid
Version = pVersion;
}
}
+
+ public class ChatMessageForJson
+ {
+ public string ChatText { get; set; }
+ public DateTime Uhrzeit { get; set; }
+ public long? EmpfängerPersonOid { get; set; }
+ public long? SenderPersonOid { get; set; }
+ public bool IsDelivered { get; set; }
+ public int IstGelesen { get; set; }
+ public long? TeamOid { get; set; }
+ public long? Oid { get; set; }
+ public DateTime? InsTs { get; set; }
+
+ public ChatMessageForJson(long? pRecipientOid, long? pSenderOid, bool pIsDelivered, int pIstGelesen, long? pTeamOid, byte[] pChatTextAsBytes, DateTime pUhrzeit, long? pOid, DateTime? pInsTs)
+ {
+ EmpfängerPersonOid = pRecipientOid;
+ SenderPersonOid = pSenderOid;
+ IsDelivered = pIsDelivered;
+ IstGelesen = pIstGelesen;
+ TeamOid = pTeamOid;
+ Uhrzeit = pUhrzeit;
+ ChatText = Encoding.UTF8.GetString(pChatTextAsBytes);
+ Oid = pOid;
+ InsTs = pInsTs;
+ }
+ }
}
}
diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs
index c615f1445..b912374cf 100644
--- a/Data/Access/SearchDAO.cs
+++ b/Data/Access/SearchDAO.cs
@@ -1622,5 +1622,13 @@ namespace BeWo.Data.Access
return c.List();
}
+
+ public IEnumerable FindAllUnreadChatMessages(List pExceptions)
+ {
+ var c = CreateCriteriaIsActive()
+ .Add(Restrictions.Not(Restrictions.In(BeWoEntityBase.PropertyName_Oid, pExceptions)));
+
+ return c.List();
+ }
}
}
diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs
index 1c9f3367f..7883ddb78 100644
--- a/Service/ServiceImplementations/OperationsServiceImp.cs
+++ b/Service/ServiceImplementations/OperationsServiceImp.cs
@@ -3151,7 +3151,6 @@ namespace BeWo.Service.ServiceImplementations
chatMessage.TeamOid = null;
}
-
DAOFactory.GenericDAO.Insert(chatMessage);
var ChatMEssagesDC = MapperFactory.ChatMessagesDC_ChatMessages.MapToNewDC(chatMessage);
@@ -3168,7 +3167,6 @@ namespace BeWo.Service.ServiceImplementations
{
try
{
-
var customercode = DAOFactory.SearchDAO.FindAllCustomerAppCodes(customerOid);
foreach (var items in customercode)
diff --git a/Shared/BeWoEntityEnums.cs b/Shared/BeWoEntityEnums.cs
index e957e3265..961df651c 100644
--- a/Shared/BeWoEntityEnums.cs
+++ b/Shared/BeWoEntityEnums.cs
@@ -838,7 +838,8 @@ namespace BS.Shared
StatusNotificationBeschäftigt,
StatusNotificationOnline,
StatusNotificationOffline,
- LoginSuccess
+ LoginSuccess,
+ MessageResponseToServer
}
public enum ChatType
diff --git a/Shared/Packet.cs b/Shared/Packet.cs
index 97212c86e..f42247643 100644
--- a/Shared/Packet.cs
+++ b/Shared/Packet.cs
@@ -81,6 +81,8 @@ namespace BS.Shared
ClientName = actualMessage.Substring(0, chatNameLength);
ChatMessage = actualMessage.Substring(chatNameLength, chatMessageLength);
+ Debug.WriteLine("Nachricht im Packet: " + ChatMessage);
+
var dateString = actualMessage.Substring(chatMessageLength + chatNameLength, 19);
MessageTimeStamp = DateTime.ParseExact(dateString, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);