void ProccessMessage() { while (End != true) { if (Messageque.Count != 0) { IMQTTMessage message = null; var buffer = Messageque.Dequeue(); switch (ReadMessageTypeFromHeader(buffer[0])) { case MessageType.Connect: { ConnectMessage mess = new ConnectMessage(); mess.MakeMessage(buffer); message = mess; Console.WriteLine("Message connected"); Console.WriteLine("username:" + mess.UserName); break; } } OnMessageRecieved?.Invoke(message); } } }
public int ProcessBuffer(ref byte[] buffer) { if (messageCompleted) { byte headerbyte; int recievedsize = buffer.Length; int i = 0; header = new FixedHeaderFrame(); do { headerbyte = buffer[i]; i++; }while (recievedsize > 0 && header.AppendByte(headerbyte)); if (!header.HeaderComplete) { return(0); } else { messagebuffer = new List <byte>(); messageCompleted = false; } } header.CreateMessageBuffer(ref messagebuffer); for (int position = (header.HeaderSize); position < buffer.Length; position++) { messagebuffer.Add(buffer[position]); if (messagebuffer.Count == (header.HeaderSize + header.RemainingLenght)) { Messageque.Enqueue(messagebuffer); messageCompleted = true; break; } } if (messagebuffer.Count < buffer.Length) { buffer.RemoveAt(0, messagebuffer.Count); return(buffer.Length - messagebuffer.Count); } else { return(0); } }