using System; using System.Diagnostics; using System.Globalization; using System.Net.Sockets; using System.Text; using BS.Shared.Extensions; namespace BS.Shared { public class Packet { // Fehlercodes zwischen 1500 und 1999 public Socket Socket { get; set; } public string ClientName { get; set; } public long SenderPersonOid { get; set; } public long RecipientPersonOid { get; set; } public DataIdentifier DataIdentifier { get; set; } public string ChatMessage { get; set; } public byte[] MediaDatei { get; set; } public DateTime MessageTimeStamp { get; set; } public string Tenant { get; set; } public bool IsDelivered { get; set; } public long ServerseitigeOid { get; set; } public long ClientseitigeOid { get; set; } public bool IsEmployee { get; set; } public string MessageId { get; set; } public int MediaTyp { get; set; } public byte[] DataBuffer = new byte[31457280]; // Aufbau Message: // die ersten fünf ";" ignorieren // SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;Tenant;[ClientName][ChatMessage][MessageTimeStamp] //[SenderOid];[RecipientOid];[ClientNameLength];[MessageLength];[ChatDataIdentifier];[ServerSeitigeOid];[ClientSeitigeOid];[Tenant];[IsEmployee]; 9 Semikola // NEU: // 34;128;0;21.11.2016 13:58;0;1;2129;238;123e4567-e89b-12d3-a456-426655440000;0;;THluZG9uIEpldHRlbg==;RGFzIGlzdCBlaW5lIFRlc3RuYWNocmljaHQ=;ZGVtb2FwcDQ=: public Packet(Socket pSocket, string pClientName, long pSenderPersonOid, long pRecipientPersonOid, bool pIsEmployee) { Socket = pSocket; ClientName = pClientName; SenderPersonOid = pSenderPersonOid; RecipientPersonOid = pRecipientPersonOid; MessageTimeStamp = DateTime.Now; ChatMessage = ""; Tenant = ""; IsEmployee = pIsEmployee; MessageId = ""; MediaTyp = 0; } public Packet() { MessageTimeStamp = DateTime.Now; ChatMessage = ""; Tenant = ""; ClientName = ""; MediaTyp = 0; } public void GetData(string message) { /* * 0 SenderPersonOid * 1 RecipientPersonOid * 2 DataIdentifier * 3 MessageTimeStamp * 4 IsDelivered * 5 IsEmployee * 6 ServerseitigeOid * 7 ClientseitigeOid * 8 MessageId * 9 MediaTyp * 10 MediaFile * 11 ClientName * 12 ChatMessage * 13 Tenant */ Debug.WriteLine("Erhaltene Nachricht: " + message); try { var gesplittet = message.Split(';'); for (var i = 0; i < gesplittet.Length; i++) { Debug.WriteLine(i + ": " + gesplittet[i]); } SenderPersonOid = Convert.ToInt64(gesplittet[0]); RecipientPersonOid = Convert.ToInt64(gesplittet[1]); DataIdentifier = (DataIdentifier)Convert.ToInt32(gesplittet[2]); MessageTimeStamp = DateTime.ParseExact(Encoding.UTF8.GetString(Convert.FromBase64String(gesplittet[3])), "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); IsDelivered = Convert.ToInt32(gesplittet[4]) == 1; IsEmployee = Convert.ToInt32(gesplittet[5]) == 1; ServerseitigeOid = Convert.ToInt64(gesplittet[6]); ClientseitigeOid = Convert.ToInt64(gesplittet[7]); MessageId = gesplittet[8]; MediaTyp = Convert.ToInt32(gesplittet[9]); if (!gesplittet[10].IsNullOrEmpty()) { MediaDatei = Convert.FromBase64String(gesplittet[10]); } if (!gesplittet[11].IsNullOrEmpty()) { ClientName = Encoding.UTF8.GetString(Convert.FromBase64String(gesplittet[11])); } if (!gesplittet[12].IsNullOrEmpty()) { ChatMessage = Encoding.UTF8.GetString(Convert.FromBase64String(gesplittet[12])); } if (!gesplittet[13].IsNullOrEmpty()) { Tenant = Encoding.UTF8.GetString(Convert.FromBase64String(gesplittet[13].Substring(0, gesplittet[13].Length - 1))); } } catch (Exception e) { Debug.WriteLine("Error 1500: " + e.Message); } } public byte[] GetDataStream() { var result = ""; result += SenderPersonOid + ";"; result += RecipientPersonOid + ";"; result += (int)DataIdentifier + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")), Base64FormattingOptions.None) + ";"; result += (IsDelivered ? 1 : 0) + ";"; result += (IsEmployee ? 1 : 0) + ";"; result += ServerseitigeOid + ";"; result += ClientseitigeOid + ";"; result += MessageId + ";"; result += MediaTyp + ";"; result += (MediaDatei != null ? Convert.ToBase64String(MediaDatei, Base64FormattingOptions.None) : "") + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(ClientName ?? ""), Base64FormattingOptions.None) + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(ChatMessage ?? ""), Base64FormattingOptions.None) + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(Tenant ?? ""), Base64FormattingOptions.None) + ":"; Debug.WriteLine("Verschicke Paket: " + result); return Encoding.UTF8.GetBytes(result); } public void GetData_ALT(string message) { Debug.WriteLine("Erhaltene Nachricht: " + message); try { var gesplittet = message.Split(';'); var senderPersonOidString = gesplittet[0]; var recipientPersonOidString = gesplittet[1]; var chatNameLengthString = gesplittet[2]; var chatMessageLengthString = gesplittet[3]; var chatIdentifierString = gesplittet[4]; var serverseitigeOidString = gesplittet[5]; var clientseitigeOidString = gesplittet[6]; Tenant = gesplittet[7]; var isEmployeeString = gesplittet[8]; MessageId = gesplittet[9]; var mediatypString = gesplittet[10]; var mediaDateiString = gesplittet[11]; DataIdentifier = (DataIdentifier) Convert.ToInt32(chatIdentifierString); SenderPersonOid = Convert.ToInt64(senderPersonOidString); RecipientPersonOid = Convert.ToInt64(recipientPersonOidString); ServerseitigeOid = Convert.ToInt64(serverseitigeOidString); ClientseitigeOid = Convert.ToInt64(clientseitigeOidString); IsEmployee = Convert.ToInt32(isEmployeeString) == 1; if (!mediatypString.IsNullOrEmpty()) { MediaTyp = Convert.ToInt32(mediatypString); } else { MediaTyp = 0; } if (!mediaDateiString.IsNullOrEmpty()) { MediaDatei = Convert.FromBase64String(mediaDateiString); } var chatNameLength = Convert.ToInt32(chatNameLengthString); var chatMessageLength = Convert.ToInt32(chatMessageLengthString); var headerLength = senderPersonOidString.Length + recipientPersonOidString.Length + chatNameLengthString.Length + chatMessageLengthString.Length + chatIdentifierString.Length + Tenant.Length + serverseitigeOidString.Length + clientseitigeOidString.Length + MessageId.Length + 12; var actualMessage = message.Substring(headerLength - 1); 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); IsDelivered = Convert.ToBoolean(Convert.ToInt32(actualMessage.Substring(chatMessageLength + chatNameLength + 19, 1))); } catch(Exception exception) { Debug.WriteLine("Error 1500: " + exception.Message); } } public byte[] GetDataStream_ALT() { var result = ""; result += SenderPersonOid + ";" + RecipientPersonOid + ";" + ClientName.Length + ";" + ChatMessage.Length + ";" + (int)DataIdentifier + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + (IsEmployee ? 1 : 0) + ";" + MessageId + ";" + ClientName + ChatMessage + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "" + (IsDelivered ? 1 : 0); Debug.WriteLine("Verschicke Paket: " + result); return Encoding.UTF8.GetBytes(result); } public byte[] GetDataStream(long pSenderPersonOid, long pRecipientPersonOid, string pClientName, string pMessage, DataIdentifier pDataIdentifier, string pTenant, bool pIsDelivered, bool pIsEmployee, string pMessageId, int pMediaType, byte[] pMediaFile) { //Bewo-Client spezialisiert var result = ""; result += pSenderPersonOid + ";"; result += pRecipientPersonOid + ";"; result += (int)pDataIdentifier + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")), Base64FormattingOptions.None) + ";"; result += (pIsDelivered ? 1 : 0) + ";"; result += (pIsEmployee ? 1 : 0) + ";"; result += 0 + ";"; result += 0 + ";"; result += pMessageId + ";"; result += pMediaType + ";"; result += (pMediaFile != null ? Convert.ToBase64String(pMediaFile, Base64FormattingOptions.None) : "") + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(pClientName ?? ""), Base64FormattingOptions.None) + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(pMessage ?? ""), Base64FormattingOptions.None) + ";"; result += Convert.ToBase64String(Encoding.UTF8.GetBytes(pTenant ?? ""), Base64FormattingOptions.None) + ":"; return Encoding.UTF8.GetBytes(result); } } }