public async Task <byte[]> ConvertMailMetaIntoBytes(MailMetaModel mail) { var messageID = BitConverter.GetBytes(swap32((uint)mail.Mail_ID)).ToList(); var sender = mail.Sender_Name.ToList(); var receiver = mail.Receiver_Name.ToList(); var sender_accountID = BitConverter.GetBytes(swap32((uint)mail.Sender_Account_ID)).ToList(); var receiver_accountID = BitConverter.GetBytes(swap32((uint)mail.Receiver_Account_ID)).ToList(); var mail_subject = mail.Mail_Subject.ToList(); while (sender.Count < MAXIMUM_NAME_SIZE) { sender.Add(0x00); } while (receiver.Count < MAXIMUM_NAME_SIZE) { receiver.Add(0x00); } while (mail_subject.Count < MAXIMUM_SUBJECT_SIZE) { mail_subject.Add(0x00); } var t = mail.date - UNIX_EPOCH; var date = new List <byte>() { 0x00, 0x00, 0x00, 0x00 }; date.AddRange(BitConverter.GetBytes(swap32((uint)t.TotalSeconds)).ToList()); var m = new MemoryStream(); await m.WriteAsync(messageID.ToArray(), 0, messageID.Count); await m.WriteAsync(receiver_accountID.ToArray(), 0, sender_accountID.Count); await m.WriteAsync(date.ToArray(), 0, date.Count); await m.WriteAsync(new byte[] { 0x07 }); await m.WriteAsync(sender_accountID.ToArray(), 0, sender_accountID.Count); await m.WriteAsync(sender.ToArray(), 0, sender.Count); await m.WriteAsync(BitConverter.GetBytes(0), 0, 4); await m.WriteAsync(receiver.ToArray(), 0, receiver.Count); await m.WriteAsync(mail_subject.ToArray(), 0, mail_subject.Count); return(m.ToArray()); }
public async Task SaveMailAsync(byte[] data) { var receiver_accountID = new byte[4]; var receiver = new byte[16]; var sender_accountID = new byte[4]; var sender = new byte[16]; var subject = new byte[32]; var body = new byte[1200]; var face = new byte[25]; logger.Debug("Taking data block and breaking it out..."); Buffer.BlockCopy(data, 4, receiver_accountID, 0, 4); Buffer.BlockCopy(data, 8, receiver, 0, 16); Buffer.BlockCopy(data, 26, sender_accountID, 0, 4); Buffer.BlockCopy(data, 30, sender, 0, 16); Buffer.BlockCopy(data, 48, subject, 0, 32); Buffer.BlockCopy(data, 176, body, 0, 1200); Buffer.BlockCopy(data, 1378, face, 0, 25); logger.Debug("...completed; dumping primative information"); logger.Debug("Receiving Account ID: " + swap32(BitConverter.ToUInt32(receiver_accountID))); logger.Debug("Receiver Name: " + encoding.GetString(receiver)); logger.Debug("Sender Account ID: " + swap32(BitConverter.ToUInt32(sender_accountID))); logger.Debug("Sender Name: " + encoding.GetString(sender)); logger.Debug("Subject Line: " + encoding.GetString(subject)); logger.Debug("Message Body: " + encoding.GetString(body)); logger.Debug("Face ID: " + encoding.GetString(face)); var metaModel = new MailMetaModel { Receiver_Account_ID = (int)swap32(BitConverter.ToUInt32(receiver_accountID)), Receiver_Name = receiver, Sender_Account_ID = (int)swap32(BitConverter.ToUInt32(sender_accountID)), Sender_Name = sender, Mail_Subject = subject, date = DateTime.UtcNow, Mail_Delivered = false }; var bodyModel = new MailBodyModel { Mail_Body = body, Mail_Face_ID = encoding.GetString(face) }; logger.Information($"An email has been sent by {sender} to {receiver}. Saving...", sender, receiver); await Task.Run(() => DBAccess.getInstance().CreateNewMail(metaModel, bodyModel)); logger.Information("The email has been saved to the database"); }
public void CreateNewMail(MailMetaModel metaModel, MailBodyModel bodyModel) { using ISession session = _sessionFactory.OpenSession(); using ITransaction transaction = session.BeginTransaction(); session.Save(metaModel); bodyModel.Mail_ID = metaModel.Mail_ID; session.Save(bodyModel); transaction.Commit(); session.Close(); }
public async Task SaveGuildMailAsync(byte[] data) { var dateNow = DateTime.UtcNow; var guildIdByteArray = new byte[2]; // 0x00 0x01 var senderAccountIdByteArray = new byte[4]; // 0x02 0x03 0x04 0x05 var sender = new byte[16]; // 0x06 for 16 count var subject = new byte[32]; // 0x18 = 24 for 32 count var body = new byte[1200]; // 0x98 = 152 for 1200 count var face = new byte[25]; // 0x54A = 1354 for 25 count logger.Debug("Taking data block and breaking it out..."); Buffer.BlockCopy(data, 0, guildIdByteArray, 0, 2); Buffer.BlockCopy(data, 2, senderAccountIdByteArray, 0, 4); Buffer.BlockCopy(data, 6, sender, 0, 16); Buffer.BlockCopy(data, 24, subject, 0, 32); Buffer.BlockCopy(data, 152, body, 0, 1200); Buffer.BlockCopy(data, 1354, face, 0, 25); ushort guildId = BitConverter.ToUInt16(guildIdByteArray).Swap(); GuildRepositoryModel guildRepositoryModel = await Task.Run(() => DBAccess.getInstance().GetGuildInfo(guildId)); int senderAccountId = (int)BitConverter.ToUInt32(senderAccountIdByteArray).Swap(); logger.Debug("...completed; dumping primative information"); logger.Debug("Receiving Guild ID: {0}", guildId); logger.Debug("Receiver Guild Name: {0} ", encoding.GetString(guildRepositoryModel.GuildName)); // Get guild name from DB logger.Debug("Sender Account ID: {0}", senderAccountId); logger.Debug("Sender Name: {0}", encoding.GetString(sender)); logger.Debug("Subject Line: {0}", encoding.GetString(subject)); logger.Debug("Message Body: {0}", encoding.GetString(body)); logger.Debug("Face ID: {0}", encoding.GetString(face)); List <CharacterRepositoryModel> guildMembers = await Task.Run(() => DBAccess.getInstance().GetAllGuildMembers(guildId)); HashSet <int> receiverAccountIdSet = guildMembers.Select(m => m.accountID).ToHashSet(); // get unique accountIDs only if (receiverAccountIdSet.Contains(senderAccountId)) { receiverAccountIdSet.Remove(senderAccountId); // just so that we don't send the mail to the sender } MailBodyModel bodyModel = new MailBodyModel // this only needed to be created once { Mail_Body = body, Mail_Face_ID = encoding.GetString(face) }; foreach (int receiverAccountId in receiverAccountIdSet) { MailMetaModel metaModel = new MailMetaModel { Receiver_Account_ID = receiverAccountId, Receiver_Name = guildRepositoryModel.GuildName, Sender_Account_ID = senderAccountId, Sender_Name = sender, Mail_Subject = subject, date = dateNow, Mail_Delivered = false }; await Task.Run(() => DBAccess.getInstance().CreateNewMail(metaModel, bodyModel)); } logger.Information("An email has been sent by {0} to Guild Members of {1}. Saving...", encoding.GetString(sender), encoding.GetString(guildRepositoryModel.GuildName)); logger.Information("The emails has been saved to the database"); }