2016-07-18 06:14:17 +02:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
2016-07-18 11:27:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
2016-07-18 06:14:17 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|