Files
BeWoPlaner/Shared/Packet.cs

255 lines
11 KiB
C#
Raw Normal View History

2016-07-25 09:23:22 +02:00
using System;
using System.Diagnostics;
using System.Globalization;
using System.Net.Sockets;
using System.Text;
2016-11-21 11:20:47 +01:00
using BS.Shared.Extensions;
2016-07-25 09:23:22 +02:00
namespace BS.Shared
2016-07-25 09:23:22 +02:00
{
public class Packet
{
2016-10-21 09:41:14 +02:00
// Fehlercodes zwischen 1500 und 1999
2016-07-25 09:23:22 +02:00
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; }
2016-11-21 11:20:47 +01:00
public byte[] MediaDatei { get; set; }
2016-07-25 09:23:22 +02:00
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; }
2016-10-21 09:41:14 +02:00
public string MessageId { get; set; }
2016-11-21 11:20:47 +01:00
public int MediaTyp { get; set; }
2016-07-25 09:23:22 +02:00
2016-11-25 11:23:44 +01:00
public byte[] DataBuffer = new byte[31457280];
2016-07-25 09:23:22 +02:00
2016-10-21 09:41:14 +02:00
// Aufbau Message:
2016-07-25 09:23:22 +02:00
// 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
2016-07-25 09:23:22 +02:00
// 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)
2016-07-25 09:23:22 +02:00
{
Socket = pSocket;
ClientName = pClientName;
SenderPersonOid = pSenderPersonOid;
RecipientPersonOid = pRecipientPersonOid;
MessageTimeStamp = DateTime.Now;
ChatMessage = "";
Tenant = "";
IsEmployee = pIsEmployee;
2016-10-21 09:41:14 +02:00
MessageId = "";
2016-11-21 11:20:47 +01:00
MediaTyp = 0;
2016-07-25 09:23:22 +02:00
}
public Packet()
{
MessageTimeStamp = DateTime.Now;
ChatMessage = "";
Tenant = "";
ClientName = "";
2016-11-21 11:20:47 +01:00
MediaTyp = 0;
}
2016-07-25 14:45:38 +02:00
2016-07-25 09:23:22 +02:00
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)
2016-07-25 09:23:22 +02:00
{
Debug.WriteLine("Erhaltene Nachricht: " + message);
2016-07-25 09:23:22 +02:00
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];
2016-10-21 09:41:14 +02:00
MessageId = gesplittet[9];
2016-11-21 11:20:47 +01:00
var mediatypString = gesplittet[10];
var mediaDateiString = gesplittet[11];
2016-07-25 09:23:22 +02:00
DataIdentifier = (DataIdentifier) Convert.ToInt32(chatIdentifierString);
SenderPersonOid = Convert.ToInt64(senderPersonOidString);
2016-07-25 09:23:22 +02:00
RecipientPersonOid = Convert.ToInt64(recipientPersonOidString);
ServerseitigeOid = Convert.ToInt64(serverseitigeOidString);
ClientseitigeOid = Convert.ToInt64(clientseitigeOidString);
2016-10-21 09:41:14 +02:00
IsEmployee = Convert.ToInt32(isEmployeeString) == 1;
2016-07-25 09:23:22 +02:00
2016-11-21 11:20:47 +01:00
if (!mediatypString.IsNullOrEmpty())
{
MediaTyp = Convert.ToInt32(mediatypString);
}
else
{
MediaTyp = 0;
}
if (!mediaDateiString.IsNullOrEmpty())
2016-11-21 11:20:47 +01:00
{
MediaDatei = Convert.FromBase64String(mediaDateiString);
2016-11-21 11:20:47 +01:00
}
var chatNameLength = Convert.ToInt32(chatNameLengthString);
2016-07-25 09:23:22 +02:00
var chatMessageLength = Convert.ToInt32(chatMessageLengthString);
2016-10-21 09:41:14 +02:00
var headerLength = senderPersonOidString.Length + recipientPersonOidString.Length + chatNameLengthString.Length + chatMessageLengthString.Length + chatIdentifierString.Length + Tenant.Length + serverseitigeOidString.Length + clientseitigeOidString.Length + MessageId.Length + 12;
2016-07-25 09:23:22 +02:00
var actualMessage = message.Substring(headerLength - 1);
ClientName = actualMessage.Substring(0, chatNameLength);
2016-07-25 09:23:22 +02:00
ChatMessage = actualMessage.Substring(chatNameLength, chatMessageLength);
2016-09-16 14:44:58 +02:00
Debug.WriteLine("Nachricht im Packet: " + ChatMessage);
var dateString = actualMessage.Substring(chatMessageLength + chatNameLength, 19);
2016-07-25 09:23:22 +02:00
MessageTimeStamp = DateTime.ParseExact(dateString, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
IsDelivered = Convert.ToBoolean(Convert.ToInt32(actualMessage.Substring(chatMessageLength + chatNameLength + 19, 1)));
2016-07-25 09:23:22 +02:00
}
catch(Exception exception)
{
Debug.WriteLine("Error 1500: " + exception.Message);
}
}
public byte[] GetDataStream_ALT()
2016-07-25 09:23:22 +02:00
{
var result = "";
2016-10-21 09:41:14 +02:00
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);
2016-07-25 09:23:22 +02:00
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);
}
2016-07-25 09:23:22 +02:00
}
}