2016-07-25 09:23:22 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
using System.Net.Sockets;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
2016-07-29 13:08:32 +02:00
|
|
|
|
namespace BS.Shared
|
2016-07-25 09:23:22 +02:00
|
|
|
|
{
|
|
|
|
|
|
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 DateTime MessageTimeStamp { get; set; }
|
|
|
|
|
|
public string Tenant { get; set; }
|
2016-07-26 15:51:30 +02:00
|
|
|
|
public bool IsDelivered { get; set; }
|
2016-07-29 13:08:32 +02:00
|
|
|
|
public long ServerseitigeOid { get; set; }
|
2016-08-01 10:10:34 +02:00
|
|
|
|
public long ClientseitigeOid { get; set; }
|
2016-07-25 09:23:22 +02:00
|
|
|
|
|
|
|
|
|
|
public byte[] DataBuffer = new byte[1024];
|
|
|
|
|
|
|
|
|
|
|
|
//Aufbau Message:
|
|
|
|
|
|
// die ersten fünf ";" ignorieren
|
|
|
|
|
|
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;Tenant;[ClientName][ChatMessage][MessageTimeStamp]
|
|
|
|
|
|
|
2016-07-29 13:08:32 +02:00
|
|
|
|
//23;281;20;389;1;39;[Tenant]; 7 Semikola
|
2016-07-25 09:23:22 +02:00
|
|
|
|
|
|
|
|
|
|
public Packet(Socket pSocket, string pClientName, long pSenderPersonOid, long pRecipientPersonOid)
|
|
|
|
|
|
{
|
|
|
|
|
|
Socket = pSocket;
|
|
|
|
|
|
ClientName = pClientName;
|
|
|
|
|
|
SenderPersonOid = pSenderPersonOid;
|
|
|
|
|
|
RecipientPersonOid = pRecipientPersonOid;
|
|
|
|
|
|
MessageTimeStamp = DateTime.Now;
|
2016-07-25 14:48:35 +02:00
|
|
|
|
ChatMessage = "";
|
|
|
|
|
|
Tenant = "";
|
2016-07-25 09:23:22 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2016-07-25 14:45:38 +02:00
|
|
|
|
public Packet(){}
|
|
|
|
|
|
|
2016-07-25 09:23:22 +02:00
|
|
|
|
public void GetData(string message)
|
|
|
|
|
|
{
|
2016-07-29 13:08:32 +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];
|
2016-07-29 13:08:32 +02:00
|
|
|
|
var chatIdentifierString = gesplittet[4];
|
|
|
|
|
|
var serverseitigeOidString = gesplittet[5];
|
2016-08-01 10:10:34 +02:00
|
|
|
|
var clientseitigeOidString = gesplittet[6];
|
|
|
|
|
|
Tenant = gesplittet[7];
|
2016-07-25 09:23:22 +02:00
|
|
|
|
|
|
|
|
|
|
DataIdentifier = (DataIdentifier) Convert.ToInt32(chatIdentifierString);
|
|
|
|
|
|
|
2016-08-01 10:10:34 +02:00
|
|
|
|
SenderPersonOid = Convert.ToInt64(senderPersonOidString);
|
2016-07-25 09:23:22 +02:00
|
|
|
|
RecipientPersonOid = Convert.ToInt64(recipientPersonOidString);
|
2016-08-01 10:10:34 +02:00
|
|
|
|
ServerseitigeOid = Convert.ToInt64(serverseitigeOidString);
|
2016-07-25 09:23:22 +02:00
|
|
|
|
|
2016-08-01 10:10:34 +02:00
|
|
|
|
var chatNameLength = Convert.ToInt32(chatNameLengthString);
|
2016-07-25 09:23:22 +02:00
|
|
|
|
var chatMessageLength = Convert.ToInt32(chatMessageLengthString);
|
|
|
|
|
|
|
2016-08-01 10:10:34 +02:00
|
|
|
|
var headerLength = senderPersonOidString.Length + recipientPersonOidString.Length + chatNameLengthString.Length + chatMessageLengthString.Length + chatIdentifierString.Length + Tenant.Length + serverseitigeOidString.Length + clientseitigeOidString.Length + 9;
|
2016-07-25 09:23:22 +02:00
|
|
|
|
var actualMessage = message.Substring(headerLength - 1);
|
|
|
|
|
|
|
2016-08-01 10:10:34 +02:00
|
|
|
|
ClientName = actualMessage.Substring(0, chatNameLength);
|
2016-07-25 09:23:22 +02:00
|
|
|
|
ChatMessage = actualMessage.Substring(chatNameLength, chatMessageLength);
|
|
|
|
|
|
|
2016-07-26 15:51:30 +02:00
|
|
|
|
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);
|
2016-07-26 15:51:30 +02:00
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
var result = "";
|
|
|
|
|
|
|
2016-08-01 10:10:34 +02:00
|
|
|
|
result += SenderPersonOid + ";" + RecipientPersonOid + ";" + ClientName.Length + ";" + ChatMessage.Length + ";" + (int) DataIdentifier + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + ClientName + ChatMessage + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "" + (IsDelivered ? 1 : 0);
|
2016-07-29 13:08:32 +02:00
|
|
|
|
|
|
|
|
|
|
Debug.WriteLine("Verschicke Paket: " + result);
|
2016-07-25 09:23:22 +02:00
|
|
|
|
|
|
|
|
|
|
return Encoding.UTF8.GetBytes(result);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|