using System; using System.Diagnostics; using System.Globalization; using System.Net.Sockets; using System.Text; 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[] SoundDatei { get; set; } public byte[] DokumentenDatei { get; set; } public byte[] BildDatei { 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 byte[] DataBuffer = new byte[1024]; // 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 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 = ""; } public Packet() { MessageTimeStamp = DateTime.Now; ChatMessage = ""; Tenant = ""; ClientName = ""; } public void GetData(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 SoundDateiAsString = gesplittet[10]; //var DokumentenDateiAsString = gesplittet[11]; //var BildDateiAsString = gesplittet[12]; 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; 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() { 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 senderPersonOid, long empfaengerPersonoid, string clientName, string message, DataIdentifier dataIdentifier, string tenant, bool isDelivered, bool IsEmploye, string Messageid) { //Bewo-Client spezialisiert var result = ""; result += senderPersonOid + ";" + empfaengerPersonoid + ";" + clientName.Length + ";" + message.Length + ";" + (int)dataIdentifier + ";" + 0 + ";" + 0 + ";" + tenant + ";" + (IsEmploye ? 1 : 0) + ";" + Messageid + ";" + clientName + message + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "" + (isDelivered ? 1 : 0); return Encoding.UTF8.GetBytes(result); } } }