using Microsoft.AspNetCore.Mvc; using sodoff.Attributes; using sodoff.Model; using sodoff.Schema; using sodoff.Services; using sodoff.Util; namespace sodoff.Controllers.Common; public class MessagingController : Controller { private readonly MessagingService messagingService; private readonly DBContext ctx; public MessagingController(MessagingService messagingService, DBContext ctx) { this.messagingService = messagingService; this.ctx = ctx; } [HttpPost] [Produces("application/xml")] [Route("MessagingWebService.asmx/GetUserMessageQueue")] [VikingSession] public ArrayOfMessageInfo? GetUserMessageQueue(Viking viking, [FromForm] bool showOldMessages, [FromForm] bool showDeletedMessages) { return messagingService.ConstructUserMessageInfoArray(viking, showOldMessages, showDeletedMessages); } [HttpPost] [Produces("application/xml")] [Route("MessagingWebService.asmx/SendMessage")] [VikingSession] public IActionResult SendMessage(Viking viking, [FromForm] Guid toUser, [FromForm] int messageID, [FromForm] string data) { // find viking to send to Viking? toViking = ctx.Vikings.FirstOrDefault(e => e.Uid == toUser); if (toViking == null) return Ok(false); // clients (at least older ones) don't send what typeID the message is, its encoded in data ArrayOfKeyValuePairOfStringString arrayOfKeyValuePairOfStringString = XmlUtil.DeserializeXml(data); MessageTypeID typeID = (MessageTypeID)int.Parse(arrayOfKeyValuePairOfStringString.KeyValuePairOfStringString![0].Value ?? "0"); var msg = messagingService.AddMessageToViking(viking, toViking, MessageType.Data, typeID, MessageLevel.WhiteList, data, "[[Line1]]=[[{{BuddyUserName}}]] has sent you a {{MessageType}}!", "[[Line1]]=[[{{BuddyUserName}}]] has sent you a {{MessageType}}!"); if (msg != null) return Ok(true); else return Ok(false); } [HttpPost] [Produces("application/xml")] [Route("MessagingWebService.asmx/SaveMessage")] public IActionResult SaveMessage([FromForm] int userMessageQueueId, [FromForm] bool isNew, [FromForm] bool IsDeleted) { var updatedMessage = messagingService.UpdateMessageByQueueID(userMessageQueueId, isNew, IsDeleted); if (updatedMessage != null) return Ok(true); else return Ok(false); } [HttpPost] [Produces("application/xml")] [Route("MessageWebService.asmx/GetCombinedListMessage")] public ArrayOfCombinedListMessage? GetCombinedListMessage([FromForm] Guid userId) { // find viking Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId); if (viking != null) return messagingService.ConstructCombinedMessageArray(viking); else return new ArrayOfCombinedListMessage(); } [HttpPost] [Produces("application/xml")] [Route("MessageWebService.asmx/RemoveMessageFromBoard")] public IActionResult RemoveMessageFromBoard([FromForm] int messageID) { messagingService.RemoveMessage(messageID); return Ok(true); } }