Ejemplo n.º 1
0
        public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
        {
            //removing user connection
            //_auctionConnectionService.Delete(Context.ConnectionId);
            AuctionConnection cnn = db.AuctionConnections.FirstOrDefault(c => c.Connection == Context.ConnectionId);
            if (cnn != null)
            {
                try
                {
                    //bool changeParticipantsCount = false;
                    //if (cnn.User != null)
                    //{
                    //    if (db.AuctionBids.Where(bid => bid.AuctionID == cnn.AuctionID && bid.UserID == cnn.UserID).FirstOrDefault() == null
                    //        && db.AuctionConnections.Where(con => con.AuctionID == cnn.AuctionID && con.UserID == cnn.UserID).Count() == 1)
                    //    {
                    //        changeParticipantsCount = true;
                    //    }
                    //}
                    //else
                    //    changeParticipantsCount = true;

                    //if (changeParticipantsCount)
                    //{
                    //    List<AuctionConnection> currentAuctionConnections = db.AuctionConnections.Where(c => c.AuctionID == cnn.AuctionID).ToList();
                    //    foreach (var item in currentAuctionConnections)
                    //    {
                    //        Clients.Client(item.Connection).participantsChanged(-1);
                    //    }
                    //}
                    Auction auction = db.Auctions.FirstOrDefault(auc => auc.ID == cnn.AuctionID);

                    db.AuctionConnections.Remove(cnn);
                    db.SaveChanges();

                    
                    if (auction != null)
                    {
                        List<int> biddersIDs = auction.AuctionBids.Select(item => item.UserID).ToList();
                        List<int> onlineAuthorizedUsersID = auction.AuctionConnections.Where(con => con.UserID != null).Select(item => (int)item.UserID).ToList();
                        int onlineUnauthorizedUsersCount = auction.AuctionConnections.Where(con => con.UserID == null).Count();
                        int NumberOfParticipants = biddersIDs.Union(onlineAuthorizedUsersID).Count() + onlineUnauthorizedUsersCount;

                        List<AuctionConnection> currentAuctionConnections = db.AuctionConnections.Where(c => c.AuctionID == auction.ID).ToList();
                        foreach (var item in currentAuctionConnections)
                        {
                            Clients.Client(item.Connection).participantsChanged(NumberOfParticipants);
                        }
                    }
                }
                catch (Exception ex)
                { }
            }

            return base.OnDisconnected(stopCalled);
        }
Ejemplo n.º 2
0
        public void AddCurrentUserToAuction(string email, int auctionID)
        {
            try
            {
                //вход в аукцион пока бесплатный

                int? userID = null;

                User user = db.Users.FirstOrDefault(u => u.Email == email);
                //User user = _userService.GetCurrentUser();
                if (user != null)
                    userID = user.ID;

                AuctionConnection aucCnn = new AuctionConnection()
                {
                    AuctionID = auctionID,
                    UserID = userID,
                    Connection = Context.ConnectionId,
                    DateCreated = DateTime.Now
                };

                db.AuctionConnections.Add(aucCnn);
                db.SaveChanges();

                Auction auction = db.Auctions.FirstOrDefault(auc => auc.ID == auctionID);
                List<int> biddersIDs = auction.AuctionBids.Select(item => item.UserID).ToList();
                List<int> onlineAuthorizedUsersID = auction.AuctionConnections.Where(cnn => cnn.UserID != null).Select(item => (int)item.UserID).ToList();
                int onlineUnauthorizedUsersCount = auction.AuctionConnections.Where(cnn => cnn.UserID == null).Count();
                int NumberOfParticipants = biddersIDs.Union(onlineAuthorizedUsersID).Count() + onlineUnauthorizedUsersCount;

                List<AuctionConnection> currentAuctionConnections = db.AuctionConnections.Where(c => c.AuctionID == auctionID).ToList();
                foreach (var item in currentAuctionConnections)
                {
                    Clients.Client(item.Connection).participantsChanged(NumberOfParticipants);
                }



                //bool changeParticipantsCount = false;
                //if (user != null)
                //{
                //    if (db.AuctionBids.Where(bid => bid.AuctionID == auctionID && bid.UserID == user.ID).FirstOrDefault() == null
                //        && db.AuctionConnections.Where(cnn => cnn.AuctionID == auctionID && cnn.UserID == user.ID).Count() < 2)
                //    {
                //        changeParticipantsCount = true;
                //    }
                //}
                //else
                //    changeParticipantsCount = true;

                //if (changeParticipantsCount)
                //{
                //    List<AuctionConnection> currentAuctionConnections = db.AuctionConnections.Where(c => c.AuctionID == auctionID).ToList();
                //    foreach (var item in currentAuctionConnections)
                //    {
                //        Clients.Client(item.Connection).participantsChanged(1);
                //    }
                //}

                //_auctionConnectionService.Create(aucCnn);
            }
            catch (Exception ex)
            {
            }
        }