255 lines
11 KiB
C#
255 lines
11 KiB
C#
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);
|
|
}
|
|
}
|
|
} |