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); } } }