Exemplo n.º 1
0
 /// <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;
     }
 }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        public void Send(string message, ChatMessageSubjects subject)
        {
            ChatMessage chatMessage = new ChatMessage(message, subject);

            socket.Send(chatMessage.Data);
        }
Exemplo n.º 4
0
        /// <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;
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        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);
            }
        }