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); }
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) { } }