Light12306/ChatRoomServer.Www/Areas/Api/Controllers/RoomController.cs
2015-07-09 21:06:30 +08:00

75 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace ChatRoomServer.Www.Areas.Api.Controllers
{
using System.Data.Entity;
using System.Threading.Tasks;
using ChatRoomServer.Db;
using ChatRoomServer.Db.Entities;
using ChatRoomServer.Www.Areas.Api.Models;
using Newtonsoft.Json;
[RoutePrefix("api/room")]
public class RoomController : ApiController
{
[AllowAnonymous]
[Route("list"), HttpGet]
public async Task<object> GetRoomss()
{
var db = new ChatDb();
var items = await db.Rooms.AsNoTracking().ToArrayAsync();
var sgroup = await db.ServerGroups.AsNoTracking().ToDictionaryAsync(s => s.ID);
var result = items.Select(s => new
{
id = s.ID,
onlinecount = s.OnlineCount,
room_people_num = 1000,
category = s.Category,
url = (sgroup.GetValue(s.ServerGroup)?.Url.EnsureEndWith("/") ?? "") + "room/" + s.ID + "/#uid#",
status = s.Status,
name = s.Name
}).ToArray();
return result;
}
[AllowAnonymous]
[Route("updateOnlineCount")]
[HttpPost]
public async Task<string> UpdateOnlineCount([FromBody]List<OnlineCountModel> idata)
{
var db = new ChatDb();
var rooms = await db.Rooms.ToDictionaryAsync(s => s.ID);
foreach (var x1 in idata)
{
var room = rooms.GetValue(x1.Id);
if (room != null)
{
room.OnlineCount = x1.Count;
db.OnlineHistories.Add(new OnlineHistory()
{
Time = DateTime.Now,
RoomID = x1.Id,
OnlineCount = x1.Count
});
}
}
//log to history
await db.SaveChangesAsync();
return "Operation succeed";
}
}
}