internal static void WriteUserList(IPacketWriter Writer, IEnumerable <IUser> users) { if (users.Count() > byte.MaxValue) { throw new ArgumentException("Too many users, max is " + byte.MaxValue); } List <byte[]> usersDatas = new List <byte[]>(); foreach (var user in users) { usersDatas.Add(UserData(user)); } using (var buffer = FeenPacketBuffer.Acquire()) { buffer.Write(PacketID.UserList); buffer.WriteLength(usersDatas.Sum(m => m.Length) + 1); buffer.Write((byte)usersDatas.Count()); buffer.Write(usersDatas.SelectMany(m => m).ToArray()); if (Writer != null) { Writer.Write(buffer); } } }
internal static void WriteChat(IPacketWriter Writer, IUser user, string text) { byte[] dataText = Encoding.ASCII.GetBytes(text); using (var buffer = FeenPacketBuffer.Acquire()) { byte[] dataUser = UserData(user); var len = dataUser.Length + dataText.Length; buffer.Write(PacketID.Chat); buffer.WriteLength(len); buffer.Write(dataUser); buffer.Write(dataText); if (Writer != null) { Writer.Write(buffer); } } }
internal static void WriteLoginStatus(IPacketWriter Writer, bool isLoggedIn, string message = null) { byte[] dataText = message == null || message.Length == 0 ? null : Encoding.ASCII.GetBytes(message); int dataTextLen = dataText == null ? 0 : dataText.Length; using (var buffer = FeenPacketBuffer.Acquire()) { buffer.Write(PacketID.LoginStatus); buffer.WriteLength(3 + dataTextLen); buffer.Write(isLoggedIn); buffer.Write((ushort)FeenPhone.Accounting.AccountHandler.Instance.Version); if (dataText != null) { buffer.Write(dataText); } if (Writer != null) { Writer.Write(buffer); } } }
internal static void WriteAudioData(IPacketWriter Writer, Guid userID, Audio.Codecs.CodecID Codec, byte[] AudioData, int AudioDataLen) { using (var buffer = FeenPacketBuffer.Acquire()) { buffer.Write(PacketID.Audio); buffer.WriteLength(AudioDataLen + (userID == Guid.Empty ? 1 : 17) + 1); if (userID == Guid.Empty) { buffer.Write(false); } else { buffer.Write(true); buffer.Write(userID.ToByteArray()); } buffer.Write(Codec); buffer.Write(AudioData, AudioDataLen); if (Writer != null) { Writer.Write(buffer); } } }