public IEnumerable<IMessage> CreateMessages(byte[] data) { var deserializer = new Deserializer(data); // template method call var message = this.CreateEmptyMessage((ushort) deserializer.ReadInt16()); // TODO: implement stream chopping and stream combination here somhow, or in the Deserializer // check if the data is enough, in that case return and save the data in between or something message.Deserialize(deserializer); // check if we got leftover data // or simply return the message we just read if (deserializer.IsEmpty()) { return new List<IMessage> { message }; } // else invoke this method with the leftover data, and add the messages to the list of messages // maybe yield the messages one after another? return new List<IMessage>(); }