private void UserEnter(User user, Room room, bool enter) { // 입장 기록 저장 EnterHistory enterHistory = new EnterHistory { User = user, Room = room, enter = enter, created_at = DateTime.Now }; db.EnterHistory.Add(enterHistory); // 입장 여부에 따라 user_count 변경 room.user_count += enter ? 1 : -1; room.user_count = room.user_count <0 ? 0 : room.user_count> room.user_limit ? room.user_limit : room.user_count; db.Entry(room).State = EntityState.Modified; db.SaveChanges(); }
public async Task JoinRoom(int user_id, int room_id) { Room room = getRoom(room_id); User user = getUser(user_id); EnterHistory recent_history = db.EnterHistory .Where(a => a.user_id == user_id && a.room_id == room_id) .OrderByDescending(a => a.created_at) .FirstOrDefault(); await Groups.Add(Context.ConnectionId, room.Id.ToString()); // 나간 기록이 있다면 입장 알림 if (recent_history == null || recent_history.enter == false) { UserEnter(user, room, true); SendGroup(room_id, user_id, user.hello_message); } }