Files
BeWoPlaner/Shared/Packet.cs
2016-11-21 11:20:47 +01:00

148 lines
6.8 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[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 = "";
MediaTyp = 0;
}
public Packet()
{
MessageTimeStamp = DateTime.Now;
ChatMessage = "";
Tenant = "";
ClientName = "";
MediaTyp = 0;
}
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 mediatypString = gesplittet[10];
var mediaDateiSring = 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 (!mediaDateiSring.IsNullOrEmpty())
{
MediaDatei = Convert.FromBase64String(mediaDateiSring);
}
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,int mediatyp,byte[]mediaDatei)
{
//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) + ";" + mediatyp + ";" + Convert.ToBase64String(mediaDatei);
return Encoding.UTF8.GetBytes(result);
}
}
}