From 80b1cdea1957c5471347f46cf8bb541e2abf1ca1 Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Mon, 25 Oct 2021 09:08:17 -0400 Subject: [PATCH] Thread safe more things --- .../HorseIsleServer/Game/Services/Auction.cs | 56 ++++-- .../HorseIsleServer/Player/User.cs | 166 ++++++++++-------- .../HorseIsleServer/Resources/GitCommit | 2 +- .../HorseIsleServer/Server/Database.cs | 2 +- .../HorseIsleServer/Server/GameServer.cs | 6 +- 5 files changed, 139 insertions(+), 93 deletions(-) diff --git a/HorseIsleServer/HorseIsleServer/Game/Services/Auction.cs b/HorseIsleServer/HorseIsleServer/Game/Services/Auction.cs index 0deddcb..c80359f 100644 --- a/HorseIsleServer/HorseIsleServer/Game/Services/Auction.cs +++ b/HorseIsleServer/HorseIsleServer/Game/Services/Auction.cs @@ -8,11 +8,19 @@ namespace HISP.Game.Services { public class Auction { - public static List AuctionRooms = new List(); + private static List auctionRooms = new List(); + public static Auction[] AuctionRooms + { + get + { + return auctionRooms.ToArray(); + } + } + public Auction(int id) { RoomId = id; - AuctionEntries = new List(); + auctionEntries = new List(); Database.LoadAuctionRoom(this, RoomId); } @@ -99,10 +107,12 @@ namespace HISP.Game.Services BidUser.LoggedinClient.SendPacket(bidPlacedMsg); } + + } public class AuctionEntry { - public AuctionEntry(int timeRemaining, int highestBid, int highestBidder, int randomId=-1) + public AuctionEntry(int timeRemaining, int highestBid, int highestBidder, int randomId = -1) { RandomId = RandomID.NextRandomId(randomId); this.timeRemaining = timeRemaining; @@ -112,8 +122,14 @@ namespace HISP.Game.Services public HorseInstance Horse; public int OwnerId; - public List Bidders = new List(); - + private List bidders = new List(); + public AuctionBid[] Bidders + { + get + { + return bidders.ToArray(); + } + } public bool Completed { get @@ -174,10 +190,13 @@ namespace HISP.Game.Services if(bid.BidUser != null) bid.BidUser.RemoveBid(bid); } - Bidders.Clear(); + bidders.Clear(); } } - + public void AddBid(AuctionBid bid) + { + bidders.Add(bid); + } public void Bid(User bidder, int bidAmount) { @@ -200,7 +219,7 @@ namespace HISP.Game.Services newBid.BidAmount = 0; newBid.PlaceBid(bidAmount); bidder.AddBid(newBid); - Bidders.Add(newBid); + bidders.Add(newBid); auctionRoomPlacedIn.UpdateAuctionRoom(); } @@ -273,21 +292,30 @@ namespace HISP.Game.Services public void DeleteEntry(AuctionEntry entry) { Database.DeleteAuctionRoom(entry.RandomId); - AuctionEntries.Remove(entry); + auctionEntries.Remove(entry); } + public void AddExistingEntry(AuctionEntry entry) + { + auctionEntries.Add(entry); + } public void AddEntry(AuctionEntry entry) { entry.auctionRoomPlacedIn = this; Database.AddAuctionRoom(entry, this.RoomId); - AuctionEntries.Add(entry); - + auctionEntries.Add(entry); } - public List AuctionEntries; + private List auctionEntries; public int RoomId; - + public AuctionEntry[] AuctionEntries + { + get + { + return auctionEntries.ToArray(); + } + } public bool HasAuctionEntry(int randomId) { foreach (AuctionEntry entry in AuctionEntries) @@ -342,7 +370,7 @@ namespace HISP.Game.Services { int code = int.Parse(tile.Code.Split('-')[1]); Auction loadAuctionRoom = new Auction(code); - AuctionRooms.Add(loadAuctionRoom); + auctionRooms.Add(loadAuctionRoom); Logger.InfoPrint("Loading Auction Room: " + code.ToString()); } } diff --git a/HorseIsleServer/HorseIsleServer/Player/User.cs b/HorseIsleServer/HorseIsleServer/Player/User.cs index 46d693c..9e394b9 100644 --- a/HorseIsleServer/HorseIsleServer/Player/User.cs +++ b/HorseIsleServer/HorseIsleServer/Player/User.cs @@ -15,6 +15,33 @@ namespace HISP.Player public class User { private List bids = new List(); + private List beingSocializedBy = new List(); + + + private int chatViolations; + private int charId; + private int subscribedUntil; + private bool subscribed; + private string profilePage; + private string privateNotes; + private int x; + private bool stealth = false; + private int y; + private int questPoints; + private double bankMoney; + private int experience; + private int hunger; + private int thirst; + private int tired; + + public Trade TradingWith = null; + + public int AttemptingToOfferItem; + public bool TradeMenuPriority = false; + + public byte[] SecCodeSeeds = new byte[3]; + public int SecCodeInc = 0; + public int SecCodeCount = 0; public int Id; public string Username; @@ -40,7 +67,48 @@ namespace HISP.Player public bool MetaPriority = false; public bool Idle; public int Facing; - + public HorseInfo.Breed PawneerOrderBreed = null; + public string PawneerOrderColor = ""; + public string PawneerOrderGender = ""; + public bool InRealTimeQuiz = false; + public int PendingTradeTo; + public Mailbox MailBox; + public Friends Friends; + public string Password; // For chat filter. + public PlayerInventory Inventory; + public Npc.NpcEntry LastTalkedToNpc; + public Shop LastShoppedAt; + public Inn LastVisitedInn; + public HorseInventory HorseInventory; + public HorseInstance LastViewedHorse; + public HorseInstance LastViewedHorseOther; + public int LastRiddenHorse = 0; + public HorseInstance CurrentlyRidingHorse; + public Tracking TrackedItems; + public Ranch OwnedRanch = null; + public PlayerQuests Quests; + public Highscore Highscores; + public MutedPlayers MutePlayer; + public Riddler LastRiddle; + public Award Awards; + public User SocializingWith; + public User PendingBuddyRequestTo; + public Dance ActiveDance; + public bool CanUseAdsChat = true; + public int CapturingHorseId; + public DateTime LoginTime; + public string LastSeenWeather; + public string AutoReplyText = ""; + public int LastClickedRanchBuilding = 0; + public bool ListingAuction = false; + public int TotalGlobalChatMessages = 1; + public User[] BeingSocializedBy + { + get + { + return beingSocializedBy.ToArray(); + } + } public Auction.AuctionBid[] Bids { get @@ -84,43 +152,7 @@ namespace HISP.Player return 7; // will change when ranches are implemented. } } - public HorseInfo.Breed PawneerOrderBreed = null; - public string PawneerOrderColor = ""; - public string PawneerOrderGender = ""; - public bool InRealTimeQuiz = false; - public int PendingTradeTo; - public Mailbox MailBox; - public Friends Friends; - public string Password; // For chat filter. - public PlayerInventory Inventory; - public Npc.NpcEntry LastTalkedToNpc; - public Shop LastShoppedAt; - public Inn LastVisitedInn; - public HorseInventory HorseInventory; - public HorseInstance LastViewedHorse; - public HorseInstance LastViewedHorseOther; - public int LastRiddenHorse = 0; - public HorseInstance CurrentlyRidingHorse; - public Tracking TrackedItems; - public Ranch OwnedRanch = null; - public PlayerQuests Quests; - public Highscore Highscores; - public MutedPlayers MutePlayer; - public Riddler LastRiddle; - public Award Awards; - public User SocializingWith; - public List BeingSocializedBy = new List(); - public User PendingBuddyRequestTo; - public Dance ActiveDance; - public bool CanUseAdsChat = true; - public int CapturingHorseId; - public DateTime LoginTime; - public string LastSeenWeather; - public string AutoReplyText = ""; - public int LastClickedRanchBuilding = 0; - public bool ListingAuction = false; - public int TotalGlobalChatMessages = 1; - + public void TakeMoney(int amount) { int money = Money; @@ -442,33 +474,27 @@ namespace HISP.Player tired = value; } } + public void ClearSocailizedWith() + { + beingSocializedBy.Clear(); + } + public void RemoveSocailizedWith(User user) + { + beingSocializedBy.Remove(user); + } + public void AddSocailizedWith(User user) + { + beingSocializedBy.Add(user); + } + public void AddBid(Auction.AuctionBid bid) + { + bids.Add(bid); + } - - private int chatViolations; - private int charId; - private int subscribedUntil; - private bool subscribed; - private string profilePage; - private string privateNotes; - private int x; - private bool stealth = false; - private int y; - private int questPoints; - private double bankMoney; - private int experience; - private int hunger; - private int thirst; - private int tired; - - public Trade TradingWith = null; - - public int AttemptingToOfferItem; - public bool TradeMenuPriority = false; - - public byte[] SecCodeSeeds = new byte[3]; - public int SecCodeInc = 0; - public int SecCodeCount = 0; - + public void RemoveBid(Auction.AuctionBid bid) + { + bids.Remove(bid); + } public int GetPlayerListIcon() { int icon = -1; @@ -589,15 +615,7 @@ namespace HISP.Player return SecCode; } - public void AddBid(Auction.AuctionBid bid) - { - bids.Add(bid); - } - - public void RemoveBid(Auction.AuctionBid bid) - { - bids.Remove(bid); - } + public User(GameClient baseClient, int UserId) { if (!Database.CheckUserExist(UserId)) @@ -681,7 +699,7 @@ namespace HISP.Player if(bid.BidAmount > 0) { bids.Add(bid); - auctionEntry.Bidders.Add(bid); + auctionEntry.AddBid(bid); } } diff --git a/HorseIsleServer/HorseIsleServer/Resources/GitCommit b/HorseIsleServer/HorseIsleServer/Resources/GitCommit index ce5372d..6cd309d 100644 --- a/HorseIsleServer/HorseIsleServer/Resources/GitCommit +++ b/HorseIsleServer/HorseIsleServer/Resources/GitCommit @@ -1 +1 @@ -7122d978a64c9cb9c9243a61c7d12fd61da558e7 +98d0c4bb5e4c2b9300b97ac11b8ba65b05365645 diff --git a/HorseIsleServer/HorseIsleServer/Server/Database.cs b/HorseIsleServer/HorseIsleServer/Server/Database.cs index 9654bef..5aa74a8 100644 --- a/HorseIsleServer/HorseIsleServer/Server/Database.cs +++ b/HorseIsleServer/HorseIsleServer/Server/Database.cs @@ -1957,7 +1957,7 @@ namespace HISP.Server auctionEntry.OwnerId = reader.GetInt32(3); auctionEntry.Completed = reader.GetString(7) == "YES"; auctionEntry.auctionRoomPlacedIn = auction; - auction.AuctionEntries.Add(auctionEntry); + auction.AddExistingEntry(auctionEntry); } diff --git a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs index 72f9018..dbbe97d 100644 --- a/HorseIsleServer/HorseIsleServer/Server/GameServer.cs +++ b/HorseIsleServer/HorseIsleServer/Server/GameServer.cs @@ -590,7 +590,7 @@ namespace HISP.Server { sender.LoggedinUser.SocializingWith = GetUserById(playerId); - sender.LoggedinUser.SocializingWith.BeingSocializedBy.Add(sender.LoggedinUser); + sender.LoggedinUser.SocializingWith.AddSocailizedWith(sender.LoggedinUser); sender.LoggedinUser.MetaPriority = true; byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildSocialMenu(sender.LoggedinUser.CurrentlyRidingHorse != null)); sender.SendPacket(metaPacket); @@ -4848,9 +4848,9 @@ namespace HISP.Server loggedInUser.PendingBuddyRequestTo = null; // Close Social Windows - foreach (User sUser in loggedInUser.BeingSocializedBy.ToArray()) + foreach (User sUser in loggedInUser.BeingSocializedBy) UpdateArea(sUser.LoggedinClient); - loggedInUser.BeingSocializedBy.Clear(); + loggedInUser.ClearSocailizedWith(); if (loggedInUser.CurrentlyRidingHorse != null)