From f9fc81dee25589e4f30874e82cc22c7a91d212d9 Mon Sep 17 00:00:00 2001 From: Waldi Date: Mon, 25 Jul 2016 14:45:38 +0200 Subject: [PATCH] DB und BEWO Client Changes --- BeWo/ServiceProxy/Generated.cs | 6 +- BeWo/View/ChatView.xaml.cs | 77 ++- BeWo/View/HomeDragPanelView.xaml.cs | 547 ++---------------- BeWo/ViewModel/ChatMessageVM.cs | 24 +- Data/Entities/ChatMessage.cs | 20 + Data/Mappings/ChatMessage.hbm.xml | 4 +- Model/Changes_25_07_2016.txt | 2 + .../ChatMessageDC_ChatMessage.cs | 6 +- .../ServiceContracts/IOperationsService.cs | 2 +- .../OperationsServiceImp.cs | 5 +- Shared/DataContracts/ChatMessageDC.cs | 4 + Shared/Packet.cs | 2 + 12 files changed, 167 insertions(+), 532 deletions(-) create mode 100644 Model/Changes_25_07_2016.txt diff --git a/BeWo/ServiceProxy/Generated.cs b/BeWo/ServiceProxy/Generated.cs index 47637c6b6..936961750 100644 --- a/BeWo/ServiceProxy/Generated.cs +++ b/BeWo/ServiceProxy/Generated.cs @@ -3775,7 +3775,7 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/CreateNewChatMessagesDC", ReplyAction="http://tempuri.org/IOperationsService/CreateNewChatMessagesDCResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/CreateNewChatMessagesDCBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message); + BS.Shared.DataContracts.ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message, int istZugestellt); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/CreateNewIsChatActiveCustomerAPPCodeDC", ReplyAction="http://tempuri.org/IOperationsService/CreateNewIsChatActiveCustomerAPPCodeDCRespo" + "nse")] @@ -4432,9 +4432,9 @@ namespace BeWo.ServiceProxy return base.Channel.CreateNewCustomerAPPCodeDC(customerOid); } - public BS.Shared.DataContracts.ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message) + public BS.Shared.DataContracts.ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message, int istZugestellt) { - return base.Channel.CreateNewChatMessagesDC(senderOid, empfängerOid, message); + return base.Channel.CreateNewChatMessagesDC(senderOid, empfängerOid, message, istZugestellt); } public BS.Shared.DataContracts.CustomerAPPCodeDC CreateNewIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType) diff --git a/BeWo/View/ChatView.xaml.cs b/BeWo/View/ChatView.xaml.cs index eefeedc8a..48e33c13a 100644 --- a/BeWo/View/ChatView.xaml.cs +++ b/BeWo/View/ChatView.xaml.cs @@ -105,7 +105,7 @@ namespace BeWo.View foreach (String i in text) { Chat.Items.Add(new KontakMessageBuilder(nameclient, i, DateTime.Now.ToString())); - SaveChatMessageinDB(personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value,i); + // SaveChatMessageinDB(personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value,i); } Chat.Items.MoveCurrentToLast(); @@ -131,7 +131,7 @@ namespace BeWo.View curitem.Receivems = anzReceive++.ToString(); } } - SaveChatMessageinDB( personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value, i); + //SaveChatMessageinDB( personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value, i); } } } @@ -154,7 +154,7 @@ namespace BeWo.View curitem.Receivems = anzRec++.ToString(); } } - SaveChatMessageinDB(personoid, BeWoApp.LoggedOnEmployee.PersonOid.Value, i); + //SaveChatMessageinDB(personoid, BeWoApp.LoggedOnEmployee.PersonOid.Value, i); } } } @@ -165,7 +165,7 @@ namespace BeWo.View } } - public void SetText(String text, String nameclient, long personoid) + public void SetText(String text, String nameclient, long personoid ) { try { @@ -185,7 +185,7 @@ namespace BeWo.View if (!nameclient.Equals("NULL") && personoid != 0) { Chat.Items.Add(new KontakMessageBuilder(nameclient, text, DateTime.Now.ToString())); - SaveChatMessageinDB(personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value, text); + //SaveChatMessageinDB(personoid,BeWoApp.LoggedOnUser.Employee.PersonOid, text); Chat.Items.MoveCurrentToLast(); Chat.ScrollIntoView(Chat.Items.CurrentItem); @@ -214,7 +214,7 @@ namespace BeWo.View } } - SaveChatMessageinDB( personoid,BeWoApp.LoggedOnEmployee.PersonOid.Value,text); + //SaveChatMessageinDB(personoid, BeWoApp.LoggedOnUser.Employee.PersonOid, text); } } } @@ -346,7 +346,7 @@ namespace BeWo.View SendMessage(curItem.EmpfaengerOid); - SaveChatMessageinDB(BeWoApp.LoggedOnEmployee.PersonOid.Value,curItem.EmpfaengerOid, Chatbox.Text); + // SaveChatMessageinDB(BeWoApp.LoggedOnEmployee.PersonOid.Value,curItem.EmpfaengerOid, Chatbox.Text); Chat.Items.MoveCurrentToLast(); Chat.ScrollIntoView(Chat.Items.CurrentItem); @@ -401,7 +401,7 @@ namespace BeWo.View SendMessage(curItem.EmpfaengerOid); - SaveChatMessageinDB(BeWoApp.LoggedOnEmployee.PersonOid.Value, curItem.EmpfaengerOid, Chatbox.Text); + // SaveChatMessageinDB(BeWoApp.LoggedOnEmployee.PersonOid.Value, curItem.EmpfaengerOid, Chatbox.Text); Chat.Items.MoveCurrentToLast(); Chat.ScrollIntoView(Chat.Items.CurrentItem); @@ -642,35 +642,56 @@ namespace BeWo.View string msg = Chatbox.Text; Chat.Items.Add(new KontakMessageBuilder(BeWoApp.LoggedOnUser.LoginName, msg, DateTime.Now.ToString())); - NetworkStream serverStream = tcpClient.GetStream(); - - //da wo drei ("3") ist muss empfänger oid hin + if (tcpClient.Connected) + { + NetworkStream serverStream = tcpClient.GetStream(); - byte[] outStream = System.Text.Encoding.UTF8.GetBytes("" + BeWoApp.LoggedOnUser.Employee.PersonOid + ";" + 3 + ";" + BeWoApp.LoggedOnUser.LoginName.Length + ";" + - msg.Length + ";" + 0 + ";" + BeWoApp.LoggedOnUser.LoginName + ";" + - BeWoApp.Tenant + msg + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); - serverStream.Write(outStream, 0, outStream.Length); - serverStream.Flush(); - - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart)delegate { ServerStats.Text = "Nachricht erfolgreich gesendet"; }); - } + //da wo drei ("3") ist muss empfänger oid hin + + byte[] outStream = + System.Text.Encoding.UTF8.GetBytes("" + BeWoApp.LoggedOnUser.Employee.PersonOid + ";" + 3 + ";" + + BeWoApp.LoggedOnUser.LoginName.Length + ";" + + msg.Length + ";" + 0 + ";" + BeWoApp.LoggedOnUser.LoginName + ";" + + BeWoApp.Tenant + msg + + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); + + serverStream.Write(outStream, 0, outStream.Length); + serverStream.Flush(); + + Dispatcher.Invoke( + DispatcherPriority.Normal, + (ThreadStart) delegate { ServerStats.Text = "Nachricht erfolgreich gesendet"; }); + } + else + { + SaveChatMessageinDB(BeWoApp.LoggedOnUser.Employee.PersonOid,empfängeroid, msg, 0); + MessageBox.Show("Die Daten werden in der Datenbank Gespeichert, da der Server nicht zur Verfügung steht.", "Info ", MessageBoxButton.OK); + } + } catch (Exception xe) { - MessageBox.Show("Beim Senden einer Nachricht zum Server ist ein Fehler aufgetreten.", "Fehler: 2300 ", MessageBoxButton.OK); + if (tcpClient.Connected){ + MessageBox.Show("Beim Senden einer Nachricht zum Server ist ein Fehler aufgetreten.", + "Fehler: 2300 ", MessageBoxButton.OK); + + Dispatcher.Invoke( + DispatcherPriority.Normal, + (ThreadStart) + delegate { ServerStats.Text = "Fehler: Die Nachricht konnte nicht gesendet werden."; }); + + } + + + - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart)delegate { ServerStats.Text = "Fehler: Die Nachricht konnte nicht gesendet werden."; }); } } - public void SaveChatMessageinDB( long senderoid,long empfangid,string message) + public void SaveChatMessageinDB( long senderoid,long empfangid,string message,int istZugestellt) { try - { - ServiceFacade.DoOperationsServiceSync(s => s.CreateNewChatMessagesDC(senderoid, empfangid, message)); + { + ServiceFacade.DoOperationsServiceSync(s => s.CreateNewChatMessagesDC(senderoid, empfangid, message, istZugestellt)); } catch (InvalidOperationException e) { diff --git a/BeWo/View/HomeDragPanelView.xaml.cs b/BeWo/View/HomeDragPanelView.xaml.cs index 1a9618d47..f70969a25 100644 --- a/BeWo/View/HomeDragPanelView.xaml.cs +++ b/BeWo/View/HomeDragPanelView.xaml.cs @@ -34,6 +34,7 @@ using System.Net.Sockets; using System.Collections; using System.Net; using System.Text; +using BeWoChatServer; namespace BeWo.View { @@ -46,14 +47,6 @@ namespace BeWo.View //################# Variablen der Serveranwendung ################# - protected Socket m_mainSocket; - protected Socket[] m_workerSocket = new Socket[10]; - - protected ArrayList m_workerSocketList = ArrayList.Synchronized(new ArrayList()); - - protected AsyncCallback asyncWorkerCallBack; - protected int clientCount = 0; - protected ListBox Clientlist = new ListBox(); protected TextBox ServerStats = new TextBox(); protected TextBox chat = new TextBox(); @@ -61,9 +54,6 @@ namespace BeWo.View protected MiniChatView pav; protected ChatView chatpav; - - SocketPacket socketDaten; - String erhaltenerDS; Dictionary pavlist = new Dictionary(); @@ -98,26 +88,19 @@ namespace BeWo.View // FillInbox(); // FillOutbox(); Loaded += HomeDragPanelViewLoaded; - - - //####################### ServerAnwendung ############################ - - //onConnectionStart(); - - + this.Dispatcher.BeginInvoke( DispatcherPriority.Normal, (Action)delegate { ConnectWithServer(); + if(clientSocket.Connected) + MessageBox.Show("Verbindung geglückt.", "Info", MessageBoxButton.OK,MessageBoxImage.Information); }); chatpav = new ChatView("Whats chat", chat.Text, clientSocket); - chatpav.Visibility = Visibility.Collapsed; - - - //#################################################################### + chatpav.Visibility = Visibility.Collapsed; } private void PreparePanels() @@ -1245,21 +1228,20 @@ namespace BeWo.View } - //############# Sever wurde ausgelagert - //-------------- Server Chat Gedöns ----------------------------------------- + //---------------------------- Server Chat Gedöns ----------------------------------------------------------------------- private void ConnectWithServer() { try { - var ipAdresse = "192.168.1.103"; - var port = 5000; + var ipAdresse = "192.168.1.103"; //103 statt 109 + var port = 5000; clientSocket.Connect(ipAdresse, port); - // Thread prf = new Thread(PruefeServerDisconection); //<---------- gibt eine Nachricht aus wenn die verbindung zum server verloren geht - // prf.Start(); + Thread prf = new Thread(PruefeServerDisconection); //<---------- gibt eine Nachricht aus wenn die verbindung zum server verloren geht + prf.Start(); SendAnmeldungsMessagetoServer(clientSocket); @@ -1294,15 +1276,12 @@ namespace BeWo.View } + public void WaitForMsFromServer() { try - { - // nehme den String auseinander und überprüfe ob es eine liste ist - // wenn nicht / schaue auf onReceiveMs || Erstmal ohne While versuchen - // while (true) - // { + { if (clientSocket != null) { serverStream = clientSocket.GetStream(); @@ -1316,23 +1295,33 @@ namespace BeWo.View //String umbauen in Liste und daten wie oid und nachricht und so rausholen - - //Wenn array dann AktList - - //ErhalteDatenFromString(data); + //Wenn array dann AktList + String[] receiveData = ErhalteDatenFromString(data); + + long persoid = Int32.Parse(receiveData[3]); + List x = new List(); - x.Add(2); + x.Add(persoid); - var person = ServiceFacade.DoCustomerServiceSync(s => s.GetPersonsById(x)); - if(!chatpav.CompareWithListItem(2)) // <----- hier muss die person Oid übergeben werden damit das ganze funzt + // if () + // { + + + // } + + + var person = ServiceFacade.DoCustomerServiceSync(s => s.GetPersonsById(x)); + + if (!chatpav.CompareWithListItem(persoid)) { - ErstelleChatViews(person[0].FirstName+" "+person[0].LastName, 2); + ErstelleChatViews(persoid); } - UebergebeNachricht(data, person[0].FirstName + " " + person[0].LastName, 2); + UebergebeNachricht(receiveData[0], person[0].FirstName + " " + person[0].LastName, persoid); + /*if(liste > 1 ) { @@ -1346,33 +1335,39 @@ namespace BeWo.View //MessageBox.Show(data, "Server", MessageBoxButton.OK); } - //} + } catch (Exception e) { if (clientSocket.Connected) MessageBox.Show("Beim Erhalten von Nachrichten ist ein Fehler aufgetreten.", "Fehler: 2030 ", MessageBoxButton.OK); - - // hier abfrage hin wenn server nicht mehr vorhanden alle 5 min neuer connect versuch starten } } - public void ErhalteDatenFromString(String message) + public String[] ErhalteDatenFromString(String message) { try - { + { + Packet a = new Packet(); + + a.GetData(message); + + string[] alfa = new string[4]; + + alfa[0] = a.ChatMessage; + alfa[1] = a.MessageTimeStamp.ToString(); + alfa[2] = a.ClientName; + alfa[3] = a.SenderPersonOid.ToString(); + - - - - // return ""; + return alfa; } catch (Exception e) { MessageBox.Show("Beim Sortieren von Nachrichten ist ein Fehler aufgetreten.", "Fehler: 2040 ", MessageBoxButton.OK); - //return null; + return null; } } @@ -1392,7 +1387,7 @@ namespace BeWo.View } - public void UebergebeNachricht(String text,String name, long personoid ) // kann sein das fehler passieren + public void UebergebeNachricht(String text,String name, long personoid ) { try { @@ -1466,14 +1461,16 @@ namespace BeWo.View //Connected ist immer true ?????? - if (clientSocket.Client.Connected == false) + if (clientSocket.Connected == false) { MessageBox.Show("Die verbindung zum Server wurde unterbrochen", "Info", MessageBoxButton.OK); + clientSocket.Close(); + break; } - Thread.Sleep(3000); + //Thread.Sleep(3000); } } catch (Exception e) @@ -1485,7 +1482,7 @@ namespace BeWo.View - private void ErstelleChatViews(String personName,long personOid) + private void ErstelleChatViews(long personOid) { try { @@ -1541,444 +1538,6 @@ namespace BeWo.View } //--------------------------------------------------------------------------------------------------------------------------- - - - //#################### Ab hier alles Weg Serveranwendung System ################################################## - public void onConnectionStart() - { - try - { - int port = 5000; - String ipAdresse = "192.168.1.103"; - - m_mainSocket = new Socket(AddressFamily.InterNetwork, - SocketType.Stream, - ProtocolType.Tcp); - - //ipAdressvergabe falls gewollt - //IPEndPoint iplocal = new IPEndPoint(IPAddress.Parse(ipAdresse),port); - IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, port); - - m_mainSocket.Bind(iplocal); - - m_mainSocket.Listen(4); - - m_mainSocket.BeginAccept(new AsyncCallback(OnConnectedClient), null); - - } - catch (SocketException e) - { - MessageBox.Show("Ups, da ist etwas kaput gegangen.","Fehler: 2010 ",MessageBoxButton.OK); - } - } - - //Zählt und (erstellt Sockets) der jeweiligen anfragen der clienten, - public void OnConnectedClient(IAsyncResult asn) - { - try - { - // if (m_mainSocket.Connected){ <------- Hier muss ordentliche abfrage hin sonst schmiert das ding beim abmelden ab. - Socket workerSocket = m_mainSocket.EndAccept(asn); - - Interlocked.Increment(ref clientCount); - - m_workerSocketList.Add(workerSocket); - - WaitforDatenfromClient(workerSocket, clientCount, "", 0); - - m_mainSocket.BeginAccept(new AsyncCallback(OnConnectedClient), null); - - //} - } - catch (SocketException e) - { - MessageBox.Show("Ups, da ist etwas kaput gegangen.", "Fehler: 2020 ", MessageBoxButton.OK); - } - } - - - //Listener der immer auf eine Antwort vom Clienten wartet - public void WaitforDatenfromClient(Socket soc, int clientnummer, String clientname, long oid) - { - try - { - if (asyncWorkerCallBack == null) - { - asyncWorkerCallBack = new AsyncCallback(OnReceiveData); - } - - SocketPacket sockPac = new SocketPacket(soc, clientnummer, clientname,oid); - - soc.BeginReceive(sockPac.dataBuffer, 0, sockPac.dataBuffer.Length, SocketFlags.None, asyncWorkerCallBack, sockPac); - - } - catch (SocketException e) - { - MessageBox.Show("Ups, da ist etwas kaput gegangen.", "Fehler: 2030 ", MessageBoxButton.OK); - } - } - - //Verarbeitet vom Clienten Erhaltene Daten - public void OnReceiveData(IAsyncResult asn) - { - socketDaten = (SocketPacket)asn.AsyncState; - - //primitiv aber effektiv mit bugs deshalb ungenutzt - Boolean erstkonntakt = false; - - try - { - - int anzahlre = socketDaten.m_currentSocket.EndReceive(asn); - char[] chars = new char[anzahlre]; - - Decoder decode = System.Text.Encoding.UTF8.GetDecoder(); - - int charLenght = decode.GetChars(socketDaten.dataBuffer, 0, anzahlre, chars, 0); - - erhaltenerDS = new String(chars); - - - string msg = "" + socketDaten.m_clientNumber + ":"; - - // Send back the reply to the client - //string replyMsg = "Server Reply:" + erhaltenerDS.ToUpper(); - // Convert the reply to byte array - //byte[] byData = System.Text.Encoding.ASCII.GetBytes(replyMsg); - - Socket workerSocket = (Socket)socketDaten.m_currentSocket; - - #region save socketdaten daten für chat bereich - //######################### Fische den Namen des Clienten Raus und weise ihm am ende zu ################ - if (socketDaten.m_clientname.ToString().Equals("")) - { - int x; - - int persOid = 0; - - String[] splitt = erhaltenerDS.Split('/'); - - //Hole die Person oid aus dem Connection String - String[] personoid = splitt[1].Split('?'); - - if (splitt.Length > 1) - { - Int32.TryParse(splitt[1], out x); - bool isNum = false; - // so oder soetwa muss das gehen - if (personoid.Length > 1) - { - isNum = Int32.TryParse(personoid[1], out persOid); - Console.WriteLine("" + persOid); - } - - if (isNum) - { - socketDaten.m_clientname = splitt[0]; - - - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart)delegate { //Clientlist.Items.Add(socketDaten.m_clientname); - - - if (persOid != 0) - socketDaten.m_clientpersonoid = persOid; - - - // chatpav.SetList(socketDaten.m_clientname,socketDaten.m_clientpersonoid,socketDaten.m_clientNumber); - chatpav.SetServerStats(splitt[0] + " Connected"); - - //statt "" war erhalteneDS | neu hinzugefügt - pav = new MiniChatView(socketDaten.m_clientname, "", chatpav,socketDaten.m_clientpersonoid); - pav.Visibility = Visibility.Collapsed; - - - //Abfrage bei gkleiche Schlüssel weil sonst crash - pavlist.Add(socketDaten.m_clientpersonoid, pav); - }); - - - erstkonntakt = true; - erhaltenerDS = splitt[0] + " Connected"; - - - // Send back the reply to the client - string replyMsg = BeWoApp.LoggedOnUser.LoginName + ":" + " Connected" + "\n"; - // Convert the reply to byte array - byte[] byData = System.Text.Encoding.ASCII.GetBytes(replyMsg); - - - Socket workerS = (Socket)socketDaten.m_currentSocket; - workerS.Send(byData); - - } - else - { - socketDaten.m_clientname = "Client"; - - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart) delegate - { - // Clientlist.Items.Add("Client" + clientCount); - // chatpav.SetList("Client" + clientCount,socketDaten.m_clientpersonoid,socketDaten.m_clientNumber); - chatpav.SetServerStats("Client" + clientCount + " Connected"); - - //statt "" war erhalteneDS | neu hinzugefügt - pav = new MiniChatView(socketDaten.m_clientname + clientCount, "", chatpav,socketDaten.m_clientpersonoid); - pav.Visibility = Visibility.Collapsed; - - pavlist.Add(socketDaten.m_clientpersonoid, pav); - }); - - erstkonntakt = true; - - // Send back the reply to the client - string replyMsg = BeWoApp.LoggedOnUser.LoginName + ":" + " Connected" + "\n"; - // Convert the reply to byte array - byte[] byData = System.Text.Encoding.ASCII.GetBytes(replyMsg); - - - Socket workerS = (Socket)socketDaten.m_currentSocket; - workerS.Send(byData); - - } - - } - else - { - socketDaten.m_clientname = "Client"; - - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart) delegate - { - //Clientlist.Items.Add("Client" + clientCount); - // chatpav.SetList("Client" + clientCount,socketDaten.m_clientpersonoid,socketDaten.m_clientNumber); - chatpav.SetServerStats("Client" + clientCount + " Connected"); - //statt "" war erhalteneDS | neu hinzugefügt - pav = new MiniChatView(socketDaten.m_clientname + clientCount, "", chatpav,socketDaten.m_clientpersonoid); - pav.Visibility = Visibility.Collapsed; - - pavlist.Add(socketDaten.m_clientpersonoid, pav); - }); - erstkonntakt = true; - - // Send back the reply to the client - string replyMsg = BeWoApp.LoggedOnUser.LoginName + ":" + " Connected " + "\n"; - // Convert the reply to byte array - byte[] byData = System.Text.Encoding.ASCII.GetBytes(replyMsg); - - - Socket workerS = (Socket)socketDaten.m_currentSocket; - workerS.Send(byData); - - } - //##################################################################################################### - } -#endregion - - #region verarbeite erhaltene Daten - // if (!erstkonntakt) - // { - //###################################### Message bereich ################################################### - //hier die aufforderung die nachrichten an alle anderen clienten zu schicken // Später umfunktioniert zu senden Klient / klienten - if (!erhaltenerDS.Equals("")) - { - SendMessageToOtherClients(erhaltenerDS, socketDaten.m_clientNumber); - } - - //aktualiesiere die gui - if (!erhaltenerDS.Equals("")) - { - - //Hier abfrage ob ehlateneDaten == Socketname dann soll maybe nix passieren/ erstellen wen gewünscht - - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart) delegate - { - chat.AppendText(socketDaten.m_clientname + ": " + erhaltenerDS + "\n"); - chat.ScrollToEnd(); - - if (chatpav.Visibility != Visibility.Visible && - pavlist[socketDaten.m_clientpersonoid].Visibility != Visibility.Visible) - { - pavlist[socketDaten.m_clientpersonoid].Visibility = Visibility.Visible; - pavlist[socketDaten.m_clientpersonoid].SetText(erhaltenerDS, 1); - } - else if (pavlist[socketDaten.m_clientpersonoid].Visibility != Visibility.Visible) - { - chatpav.SetText(erhaltenerDS, socketDaten.m_clientname,socketDaten.m_clientpersonoid); - } - else - { - pavlist[socketDaten.m_clientpersonoid].AppendTextwhileViewOpen(erhaltenerDS, 1); - } - - }); - - //Continue Waiting for data on The Current socket - WaitforDatenfromClient(socketDaten.m_currentSocket, socketDaten.m_clientNumber, - socketDaten.m_clientname,socketDaten.m_clientpersonoid); - } - else - { - //primitiv aber funktioniert entfernt den current client - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart) delegate - { - - - if (!socketDaten.m_clientname.Equals("Client")) - { - - chatpav.RemoveListItem(socketDaten.m_clientpersonoid); - - chatpav.SetServerStats(socketDaten.m_clientname + " Disconnected ! "); - - pavlist.Remove(socketDaten.m_clientpersonoid); - - m_workerSocketList[socketDaten.m_clientNumber - 1] = null; - workerSocket.Close(); - - } - else - { - chatpav.RemoveListItem(socketDaten.m_clientpersonoid); - chatpav.SetServerStats(socketDaten.m_clientname + socketDaten.m_clientNumber + - " Disconnected ! "); - - //Removed die dazugehörige Minichatview - pavlist.Remove(socketDaten.m_clientpersonoid); - - m_workerSocketList[socketDaten.m_clientNumber - 1] = null; - workerSocket.Close(); - } - }); - //###################################### Message bereich Ende ################################################### - } -#endregion - - - } - catch (ObjectDisposedException) - { - System.Diagnostics.Debugger.Log(0, "1", "\n OnReceiveData: Socket has been closed \n"); - } - catch (SocketException se) - { - MessageBox.Show(se.Message); - - if (se.ErrorCode == 10054) // Error code for Connection reset - { - m_workerSocketList[socketDaten.m_clientNumber - 1] = null; - } - } - - } - - //erstellt den Current Socket und legt die Größe fest - public class SocketPacket - { - public Socket m_currentSocket; - public int m_clientNumber; - public String m_clientname; - public long m_clientpersonoid; - - // Buffer to store the data sent by the client - public byte[] dataBuffer = new byte[1024]; - - public SocketPacket(Socket socket, int clientNummer, String name,long oid) - { - m_currentSocket = socket; - m_clientNumber = clientNummer; - m_clientname = name; - m_clientpersonoid = oid; - } - } - - //Sende Nachrichten von Client an alle anderen clienten - public void SendMessageToOtherClients(String msg, int curClient) - { - try - { - msg = "Client " + curClient + ": " + msg + "\n"; - byte[] byData = System.Text.Encoding.ASCII.GetBytes(msg); - Socket workerSocket = null; - - int x = 1; - for (int i = 0; i < m_workerSocketList.Count; i++) - { - - if (x != curClient) - { - workerSocket = (Socket)m_workerSocketList[i]; - if (workerSocket != null) - { - if (workerSocket.Connected) - { - workerSocket.Send(byData); - } - } - } - else - { - //Console.WriteLine("I ist gleich curent Client"); - } - x++; - } - - //Console.WriteLine("Entweder Erfolgreich oder halt aber nicht"); - - } - catch (Exception xe) - { - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart)delegate { chatpav.SetServerStats("Ein Fehler im Bereich Message"); }); - - } - - } - - - public void CloseConnection() - { - try - { - if (m_mainSocket != null) - { - m_mainSocket.Close(); - } - - Socket workerSocket = null; - for (int i = 0; i < m_workerSocketList.Count; i++) - { - workerSocket = (Socket)m_workerSocketList[i]; - if (workerSocket != null) - { - - workerSocket.Close(); - //workerSocket = null; - } - } - } - catch (Exception ze) - { - Dispatcher.Invoke( - DispatcherPriority.Normal, - (ThreadStart)delegate { ServerStats.Text = "Ein Fehler im Bereich Schließen"; }); - } - } - - //####################### Close Connection den Abmelde Button anfügen ############################### - - - - } public class TaskDateDescriptionConverter : IValueConverter diff --git a/BeWo/ViewModel/ChatMessageVM.cs b/BeWo/ViewModel/ChatMessageVM.cs index 65e382d8c..d3d0ea729 100644 --- a/BeWo/ViewModel/ChatMessageVM.cs +++ b/BeWo/ViewModel/ChatMessageVM.cs @@ -10,6 +10,8 @@ namespace BeWo.ViewModel public static string PropertyName_Uhrzeit = "Uhrzeit"; + public static string PropertyName_IstZugestellt = "IstZugestellt"; + private string _ChatText; private DateTime _Uhrzeit; @@ -18,6 +20,8 @@ namespace BeWo.ViewModel private long? _EmpfängerPersonOid; + private int _istZugestellt; + public ChatMessageVM(ChatMessageDC pDC) : base(pDC, true) @@ -85,6 +89,22 @@ namespace BeWo.ViewModel } } + public virtual int IstZugestellt + { + get + { + return _istZugestellt; + } + + set + { + if (AreDifferent(_istZugestellt, value)) + { + _istZugestellt = value; + } + } + } + protected override void InitByDataContract(ChatMessageDC pDataContract) { @@ -92,6 +112,7 @@ namespace BeWo.ViewModel this._EmpfängerPersonOid = pDataContract.EmpfängerPersonOid; this._Uhrzeit = pDataContract.Uhrzeit; this._ChatText = pDataContract.ChatText; + _istZugestellt = pDataContract.IstZugestellt; } protected override ChatMessageDC MapToDataContract(ChatMessageDC pDataContract, bool doCommit) @@ -99,7 +120,8 @@ namespace BeWo.ViewModel pDataContract.SenderPersonOid = _SenderPersonOid; pDataContract.EmpfängerPersonOid = _EmpfängerPersonOid; pDataContract.Uhrzeit = _Uhrzeit; - pDataContract.ChatText = _ChatText; + pDataContract.ChatText = _ChatText; + pDataContract.IstZugestellt = _istZugestellt; return pDataContract; } diff --git a/Data/Entities/ChatMessage.cs b/Data/Entities/ChatMessage.cs index 1c0ce7a5e..25e909d40 100644 --- a/Data/Entities/ChatMessage.cs +++ b/Data/Entities/ChatMessage.cs @@ -14,6 +14,8 @@ namespace BeWo.Data.Entities public static string PropertyName_SenderPersonOid = "SenderPersonOid"; + public static string PropertyName_IstZugestellt = "IstZugestellt"; + private string _ChatText; private DateTime _Uhrzeit; @@ -22,6 +24,8 @@ namespace BeWo.Data.Entities private long? _SenderPersonOid; + private int _istZugestellt; + public ChatMessage() { _Tid = TableID.ChatMessage; @@ -90,6 +94,22 @@ namespace BeWo.Data.Entities } } } + + public virtual int istZugestellt + { + get + { + return _istZugestellt; + } + set + { + if (AreDifferent(_istZugestellt, value)) + { + _istZugestellt = value; + } + } + } + } diff --git a/Data/Mappings/ChatMessage.hbm.xml b/Data/Mappings/ChatMessage.hbm.xml index 512f48e3a..fcc2e23c6 100644 --- a/Data/Mappings/ChatMessage.hbm.xml +++ b/Data/Mappings/ChatMessage.hbm.xml @@ -15,7 +15,9 @@ - + + + \ No newline at end of file diff --git a/Model/Changes_25_07_2016.txt b/Model/Changes_25_07_2016.txt new file mode 100644 index 000000000..eed750db1 --- /dev/null +++ b/Model/Changes_25_07_2016.txt @@ -0,0 +1,2 @@ +ALTER TABLE `1234567890`.`chatmessages` +ADD COLUMN `IstZugestellt` TINYINT(4) NULL DEFAULT NULL COMMENT '' AFTER `Uhrzeit`; diff --git a/Service/DCEntityMapper/ChatMessageDC_ChatMessage.cs b/Service/DCEntityMapper/ChatMessageDC_ChatMessage.cs index 2e181b2cb..59df00304 100644 --- a/Service/DCEntityMapper/ChatMessageDC_ChatMessage.cs +++ b/Service/DCEntityMapper/ChatMessageDC_ChatMessage.cs @@ -14,7 +14,8 @@ namespace BeWo.Service.DCEntityMapper pDataContract.EmpfängerPersonOid = pEntity.EmpfängerPersonOid; pDataContract.ChatText = pEntity.ChatText; pDataContract.Uhrzeit = pEntity.Uhrzeit; - + pDataContract.IstZugestellt = pEntity.istZugestellt; + return pDataContract; } @@ -24,7 +25,8 @@ namespace BeWo.Service.DCEntityMapper pEntity.EmpfängerPersonOid = pDataContract.EmpfängerPersonOid; pEntity.Uhrzeit = pDataContract.Uhrzeit; pEntity.ChatText = pDataContract.ChatText; - + pEntity.istZugestellt = pDataContract.IstZugestellt; + return pEntity; } diff --git a/Service/ServiceContracts/IOperationsService.cs b/Service/ServiceContracts/IOperationsService.cs index d36c0e169..b03301877 100644 --- a/Service/ServiceContracts/IOperationsService.cs +++ b/Service/ServiceContracts/IOperationsService.cs @@ -515,7 +515,7 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof (BeWoFault))] [OperationContract] - ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message); + ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message, int istZugestellt); [FaultContract(typeof(BeWoFault))] [OperationContract] diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs index 0923034c5..5995d52b9 100644 --- a/Service/ServiceImplementations/OperationsServiceImp.cs +++ b/Service/ServiceImplementations/OperationsServiceImp.cs @@ -3102,7 +3102,7 @@ namespace BeWo.Service.ServiceImplementations } } - public ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message) + public ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message, int istZugestellt) { try { @@ -3111,7 +3111,8 @@ namespace BeWo.Service.ServiceImplementations newCode.SenderPersonOid = senderOid; newCode.Uhrzeit = DateTime.Now; newCode.ChatText = message; - + newCode.istZugestellt = istZugestellt; + DAOFactory.GenericDAO.Insert(newCode); var ChatMEssagesDC = MapperFactory.ChatMessagesDC_ChatMessages.MapToNewDC(newCode); diff --git a/Shared/DataContracts/ChatMessageDC.cs b/Shared/DataContracts/ChatMessageDC.cs index d3ab04f8b..ad891dd03 100644 --- a/Shared/DataContracts/ChatMessageDC.cs +++ b/Shared/DataContracts/ChatMessageDC.cs @@ -22,5 +22,9 @@ namespace BS.Shared.DataContracts [DataMember] public string ChatText { get; set; } + [DataMember] + public int IstZugestellt { get; set; } + + } } \ No newline at end of file diff --git a/Shared/Packet.cs b/Shared/Packet.cs index 24a3cc5b0..c33150995 100644 --- a/Shared/Packet.cs +++ b/Shared/Packet.cs @@ -37,6 +37,8 @@ namespace BeWoChatServer MessageTimeStamp = DateTime.Now; } + public Packet(){} + public void GetData(string message) { Debug.WriteLine("Nachricht: " + message);