Files
BeWoPlaner/BeWoChatServer/Packet.cs
staccatomamba 88d70537a4 abc
2016-07-18 06:14:17 +02:00

82 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using BS.Shared;
namespace BeWoChatServer
{
public class Packet
{
public Socket Socket { get; set; }
public int ClientNumber { 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[] DataBuffer = new byte[1024];
public Packet(Socket pSocket, int pClientNumber, string pClientName, long pSenderPersonOid, long pRecipientPersonOid)
{
Socket = pSocket;
ClientNumber = pClientNumber;
ClientName = pClientName;
SenderPersonOid = pSenderPersonOid;
RecipientPersonOid = pRecipientPersonOid;
}
// 0 4 8 12 20 28
// Description -> |dataIdentifier|name length|message length|sender person oid|recipient person oid| name | message |
// Size in bytes -> | 4 | 4 | 4 | 8 | 8 |name length|message length|
public Packet(byte[] dataStream)
{
DataIdentifier = (DataIdentifier)BitConverter.ToInt32(dataStream, 0);
var nameLength = BitConverter.ToInt32(dataStream, 4);
var messageLength = BitConverter.ToInt32(dataStream, 8);
SenderPersonOid = BitConverter.ToInt64(dataStream, 12);
RecipientPersonOid = BitConverter.ToInt64(dataStream, 20);
ClientName = nameLength > 0 ? Encoding.UTF8.GetString(dataStream, 28, nameLength) : null;
ChatMessage = messageLength > 0 ? Encoding.UTF8.GetString(dataStream, 28 + nameLength, messageLength) : null;
}
public void GetData(string message)
{
//Aufbau Message:
// die ersten fünf ";" ignorieren
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;ClientNameChatMessage
//23;281;20;389;1; 5 Semikola
var gesplittet = message.Split(';');
SenderPersonOid = Convert.ToInt64(gesplittet[0]);
RecipientPersonOid = Convert.ToInt64(gesplittet[1]);
var chatNameLength = Convert.ToInt32(gesplittet[2]);
var chatMessageLength = Convert.ToInt32(gesplittet[3]);
var headerLength = gesplittet[0].Length + gesplittet[1].Length + gesplittet[2].Length + gesplittet[3].Length + 5;
var actualMessage = message.Substring(headerLength - 1);
ClientName = actualMessage.Substring(0, chatNameLength);
ChatMessage = actualMessage.Substring(chatNameLength);
}
// Java kennt nur unsigned bytes (-127 bis 128)
public byte[] GetDataStream()
{
var result = "";
return Encoding.UTF8.GetBytes(result);
}
}
}