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