/// <summary> /// used to decode a received message /// </summary> /// <param name="data">The full data that is to be decoded</param> public ChatMessage(byte[] data) { try { string data_string = Encoding.UTF8.GetString(data.Where(new Func<byte, bool>((b) => { return b != 0; })).ToArray()); this.text = data_string.Split(';')[0]; this.subject = (ChatMessageSubjects)Enum.Parse(typeof(ChatMessageSubjects), data_string.Split(';')[1]); } catch (Exception ex) { this.DecodeError = ex.Message; this.Valid = false; } }
/// <summary> /// Used for encoding a message to send to connected peers /// </summary> /// <param name="innerData">The internal message for the package</param> /// <param name="subject">The subject for the package</param> /// <param name="aes">Takes the encryptionservice to encrypt the message with</param> /// <param name="publicKey">Takes this peer's public key if the subject PublicKey has been selected</param> public ChatMessage(string innerData, ChatMessageSubjects subject) { Valid = true; byte[] encoded = Encoding.UTF8.GetBytes(innerData); if (encoded.Length >= 1000) { this.Valid = false; this.Error = "ExceededMessageMaxLength"; return; } this.data = new byte[encoded.Length + 1]; this.data[0] = (byte)subject; Array.Copy(encoded, 0, this.data, 1, encoded.Length); }
public void Send(string message, ChatMessageSubjects subject) { ChatMessage chatMessage = new ChatMessage(message, subject); socket.Send(chatMessage.Data); }
/// <summary> /// Used for creating a new message to send to the other end of the connection /// </summary> /// <param name="innerData">The internal message for the package</param> /// <param name="subject">The subject for the package</param> public ChatMessage(string innerData, ChatMessageSubjects subject) { this.data = Encoding.ASCII.GetBytes(innerData + ";" + Enum.GetName(typeof(ChatMessageSubjects), subject)); Valid = true; }
/// <summary> /// used to decode a received message /// </summary> /// <param name="data">The full data that is to be decoded</param> public ChatMessage(byte[] data, int dataLength) { this.Valid = true; dataLength--; bool validSubject = false; Array.ForEach<ChatMessageSubjects>(Enum.GetValues(typeof(ChatMessageSubjects)).Cast<ChatMessageSubjects>().ToArray(), (e) => { if (data[0] == Convert.ToByte(e)) { this.subject = e; validSubject = true; } }); if (!validSubject) { this.Valid = false; this.Error = "InvalidSubject"; return; } byte[] encoded = new byte[dataLength]; Array.Copy(data, 1, encoded, 0, dataLength); this.text = Encoding.UTF8.GetString(encoded); }
public void Send(string innerText, ChatMessageSubjects subject) { ChatMessage chatMessage = new ChatMessage(innerText, subject); if (chatMessage.Valid) { Console.WriteLine(RemoteEndPoint.Address.ToString() + ", " + attachedAccount.Username + ", Send: " + Enum.GetName(typeof(ChatMessageSubjects), subject) + ";" + innerText); try { socket.Send(chatMessage.Data); } catch { Disconnect(); } } else { Console.WriteLine(RemoteEndPoint.Address.ToString() + ", " + attachedAccount.Username + ", FailSend: " + Enum.GetName(typeof(ChatMessageSubjects), subject) + ";" + innerText); } }