public Configuration(string setupfilename, System.Random random, StockIndexes stockindexes, Stocks stocks, Players players) : base() { try { SetupFileName = setupfilename; StockIndexes = stockindexes; if (StockIndexes == null) { StockIndexes = new StockIndexes(); } Stocks = stocks; if (Stocks == null) { Stocks = new Stocks(); } Players = players; if (Players == null) { Players = new Players(); } Load(random); } catch (System.Exception ex) { throw ex; } }
public System.Object ServerCommunication(Version clientversion, ICommunicateable communicator, bool full, System.Object obj) { try { Player player = (Player)obj; if (clientversion.Major > 0) { lock (SynchronizeRoot) { if (full) { // Receive information about the new player. string company = communicator.ReceiveString(); string name = communicator.ReceiveString(); // Create the new player. player = new Player(Players.NextPlayerId, company, name, Stocks, false, false); player.Capital = ((int)System.Math.Round(Players.AverageValue / 1000, 0)) * 1000; player.ValueHistory.Clear(); Players.Add(player); } // Send game informations. StockIndexes.ServerCommunication(clientversion, communicator, full, null); Stocks.ServerCommunication(clientversion, communicator, full, StockIndexes); Players.ServerCommunication(clientversion, communicator, full, player.Id); MarketState.ServerCommunication(clientversion, communicator, full, null); } } return(player); } catch (System.Exception ex) { throw ex; } }
public Stock(Version serverversion, ICommunicateable communicator, bool full, System.Object obj) : base() { try { StockIndexes = new StockIndexes(); PriceHistory = new DoubleHistory(); ClientCommunication(serverversion, communicator, full, obj); } catch (System.Exception ex) { throw ex; } }
public Stock(Version fv, WsgFileStream fs, System.Object obj) : base() { try { StockIndexes = new StockIndexes(); PriceHistory = new DoubleHistory(); Load(fv, fs, obj); } catch (System.Exception ex) { throw ex; } }
public System.Object ClientCommunication(Version serverversion, ICommunicateable communicator, bool full, System.Object obj) { try { if (serverversion.Major > 0) { if (full) { Id = communicator.ReceiveString(); Name = communicator.ReceiveString(); int c = communicator.ReceiveInt(); if (c > 0) { StockIndexes stockindexes = (StockIndexes) obj; for (int i = 0; i < c; i++) { string id = communicator.ReceiveString(); StockIndex stockindex = null; if (stockindexes.TryGetValue(id, out stockindex)) { stockindex.Stocks.Add(Id, this); StockIndexes.Add(stockindex.Id, stockindex); } } } PriceHistory.ClientCommunication(serverversion, communicator, full, obj); } if (serverversion.Major > 0 && serverversion.Minor >= 1) { MinPrice = communicator.ReceiveDouble(); MaxPrice = communicator.ReceiveDouble(); } else { MinPrice = MIN_PRICE; MaxPrice = MAX_PRICE; } Price = communicator.ReceiveDouble(); if (full && PriceHistory.Count > 0) PriceHistory.RemoveAt(PriceHistory.Count - 1); Available = communicator.ReceiveInt(); OwnedByPlayers = communicator.ReceiveInt(); } return this; } catch (System.Exception ex) { throw ex; } }
public void Save(Version fv, WsgFileStream fs) { try { if (BeforeSaveEvent != null) { BeforeSaveEvent(); } if (fv.Major > 0) { while (PlayTimer.Enabled) { PlayTimer.Stop(); } fs.Seek(0, System.IO.SeekOrigin.Begin); FileVersion.Save(fv, fs); StockIndexes.Save(fv, fs); Stocks.Save(fv, fs); Players.Save(fv, fs); MarketState.Save(fv, fs); fs.Flush(); FileName = fs.Name; while (!PlayTimer.Enabled) { PlayTimer.Start(); } } if (AfterSaveEvent != null) { AfterSaveEvent(); } if (UpdateStockInformationsEvent != null) { UpdateStockInformationsEvent(); } if (UpdatePlayerInformationsEvent != null) { UpdatePlayerInformationsEvent(); } } catch (System.Exception ex) { while (!PlayTimer.Enabled) { PlayTimer.Start(); } throw ex; } }
public void AddStockIndex(StockIndex stockindex) { try { if (!StockIndexes.ContainsKey(stockindex.Id)) { StockIndexes.Add(stockindex.Id, stockindex); if (!stockindex.Stocks.ContainsKey(this.Id)) stockindex.Stocks.Add(this.Id, this); } } catch (System.Exception ex) { throw ex; } }
public Stock(string id, string name, StockIndex stockindex, System.Random random) : base() { try { Id = id; Name = name; StockIndexes = new StockIndexes(); PriceHistory = new DoubleHistory(); AddStockIndex(stockindex); Reset(random); } catch (System.Exception ex) { throw ex; } }
public System.Object Load(Version fv, WsgFileStream fs, System.Object obj) { try { if (fv.Major > 0) { Id = fs.ReadString(); Name = fs.ReadString(); int c = fs.ReadInt(); if (c > 0) { StockIndexes stockindexes = (StockIndexes) obj; for (int i = 0; i < c; i++) { string id = fs.ReadString(); StockIndex stockindex = null; if (stockindexes.TryGetValue(id, out stockindex)) { stockindex.Stocks.Add(Id, this); StockIndexes.Add(stockindex.Id, stockindex); } } } PriceHistory.Load(fv, fs, obj); if (fv.Major > 0 && fv.Minor >= 1) { MinPrice = fs.ReadDouble(); MaxPrice = fs.ReadDouble(); } else { MinPrice = MIN_PRICE; MaxPrice = MAX_PRICE; } Price = fs.ReadDouble(); if (PriceHistory.Count > 0) PriceHistory.RemoveAt(PriceHistory.Count - 1); Available = fs.ReadInt(); OwnedByPlayers = fs.ReadInt(); } return this; } catch (System.Exception ex) { throw ex; } }
public System.Object ClientCommunication(Version serverversion, ICommunicateable communicator, bool full, System.Object obj) { try { if (serverversion.Major > 0) { lock (SynchronizeRoot) { if (full) { // Send information about the client. communicator.SendString(CurrentPlayer.Company); communicator.SendString(CurrentPlayer.Name); // Clear and reset game informations. while (PlayTimer.Enabled) { PlayTimer.Stop(); } while (StockIndexes.Count > 0) { StockIndexes.Clear(); } while (Stocks.Count > 0) { Stocks.Clear(); } while (Players.Count > 0) { Players.Clear(); } MarketState.Reset(Random); CurrentPlayer = null; } // Receive new game informations. StockIndexes.ClientCommunication(serverversion, communicator, full, null); Stocks.ClientCommunication(serverversion, communicator, full, StockIndexes); CurrentPlayer = (Player)Players.ClientCommunication(serverversion, communicator, full, Stocks); MarketState.ClientCommunication(serverversion, communicator, full, null); } } return(this); } catch (System.Exception ex) { throw ex; } }
public Game(System.ComponentModel.ISynchronizeInvoke si, string setupfilename) : base() { try { Random = new System.Random(); FileVersion = new Version(FILEVERSION_MAJOR, FILEVERSION_MINOR); StockIndexes = new StockIndexes(); Stocks = new Stocks(); Players = new Players(); Configuration = new Configuration(setupfilename, Random, StockIndexes, Stocks, Players); if (StockIndexes == null) { StockIndexes = Configuration.StockIndexes; } if (Stocks == null) { Stocks = Configuration.Stocks; } if (Players == null) { Players = Configuration.Players; } MarketState = new MarketState(); CurrentPlayer = new Player(Players.NextPlayerId, String.Empty, String.Empty, Stocks, false, true); Players.Add(CurrentPlayer); SynchronizeRoot = Singleton.Instance; PlayTimer = new System.Timers.Timer(PLAY_TIMER_INTERVAL); PlayTimer.AutoReset = true; PlayTimer.Elapsed += new System.Timers.ElapsedEventHandler(PlayTimerElapsed); PlayTimer.SynchronizingObject = si; while (!PlayTimer.Enabled) { PlayTimer.Start(); } Disposed = false; } catch (System.Exception ex) { throw ex; } }
public void Load(System.Random random) { try { while (StockIndexes.Count > 0) { StockIndexes.Clear(); } while (Stocks.Count > 0) { Stocks.Clear(); } if (XmlDocument == null) { XmlDocument = new System.Xml.XmlDocument(); } XmlDocument.Load(SetupFileName); AllStocksXmlNode = XmlDocument.DocumentElement.SelectSingleNode("AllStocks"); if (AllStocksXmlNode == null) { throw new System.Exception("No node named 'AllStocks' in the file named '" + SetupFileName + "'."); } else if (AllStocksXmlNode.Attributes["indexid"] == null) { throw new System.Exception("No attribute named 'indexid' on a node named '" + AllStocksXmlNode.LocalName + "' in the file named '" + SetupFileName + "'."); } System.Xml.XmlNodeList xmlnodes = XmlDocument.DocumentElement.SelectNodes("StockIndex"); if (xmlnodes == null) { throw new System.Exception("No nodes named 'StockIndex' in the file named '" + SetupFileName + "'."); } else if (xmlnodes.Count == 0) { throw new System.Exception("No nodes named 'StockIndex' in the file named '" + SetupFileName + "'."); } foreach (System.Xml.XmlNode xmlnode in xmlnodes) { if (xmlnode.Attributes["indexid"] == null) { throw new System.Exception("No attribute named 'indexid' on a node named '" + xmlnode.LocalName + "' in the file named '" + SetupFileName + "'."); } if (xmlnode.Attributes["name"] == null) { throw new System.Exception("No attribute named 'named' on a node named '" + xmlnode.LocalName + "' in the file named '" + SetupFileName + "'."); } StockIndex stockindex = null; if (!StockIndexes.TryGetValue(xmlnode.Attributes["indexid"].Value, out stockindex)) { stockindex = new StockIndex(xmlnode.Attributes["indexid"].Value, xmlnode.Attributes["name"].Value); StockIndexes.Add(stockindex.Id, stockindex); } System.Xml.XmlNodeList xmlchildnodes = xmlnode.SelectNodes("Stock"); if (xmlchildnodes == null) { throw new System.Exception("No nodes named 'Stock' under the node named '" + xmlnode.LocalName + "' where indexid is '" + xmlnode.Attributes["indexid"].Value + "' in the file named '" + SetupFileName + "'."); } if (xmlchildnodes.Count == 0) { throw new System.Exception("No nodes named 'Stock' under the node named '" + xmlnode.LocalName + "' where indexid is '" + xmlnode.Attributes["indexid"].Value + "' in the file named '" + SetupFileName + "'."); } foreach (System.Xml.XmlNode xmlchildnode in xmlchildnodes) { if (xmlchildnode.Attributes["stockid"] == null) { throw new System.Exception("No attribute named 'stockid' on a node named '" + xmlchildnode.LocalName + "' under the node named '" + xmlnode.LocalName + "' where indexid is '" + xmlnode.Attributes["indexid"].Value + "' in the file named '" + SetupFileName + "'."); } Stock stock = null; if (!Stocks.TryGetValue(xmlchildnode.Attributes["stockid"].Value, out stock)) { if (xmlchildnode.HasChildNodes) { if (xmlchildnode.HasChildNodes) { stock = new Stock(xmlchildnode.Attributes["stockid"].Value, xmlchildnode.FirstChild.Value, stockindex, random); Stocks.Add(stock.Id, stock); } } } else if (xmlchildnode.HasChildNodes) { stock.AddStockIndex(stockindex); } } } if (AllStocksIndexId.Length > 0 && AllStocksIndexName.Length > 0) { if (!StockIndexes.ContainsKey(AllStocksIndexId)) { StockIndex stockindex = new StockIndex(AllStocksIndexId, AllStocksIndexName); foreach (Stock stock in Stocks.Values) { stock.StockIndexes.Add(stockindex.Id, stockindex); stockindex.Stocks.Add(stock.Id, stock); } StockIndexes.Add(stockindex.Id, stockindex); } } xmlnodes = XmlDocument.DocumentElement.SelectNodes("Player"); if (xmlnodes == null) { throw new System.Exception("No nodes named 'Player' in the file named '" + SetupFileName + "'."); } else if (xmlnodes.Count == 0) { throw new System.Exception("No nodes named 'Player' in the file named '" + SetupFileName + "'."); } foreach (System.Xml.XmlNode xmlnode in xmlnodes) { if (xmlnode.Attributes["company"] == null) { throw new System.Exception("No attribute named 'company' on a node named '" + xmlnode.LocalName + "' in the file named '" + SetupFileName + "'."); } if (xmlnode.HasChildNodes) { Players.Add(new Player(Players.NextPlayerId, xmlnode.Attributes["company"].Value, xmlnode.FirstChild.Value, Stocks)); } } } catch (System.Exception ex) { throw ex; } }
public System.Object Load(Version fv, WsgFileStream fs, System.Object obj) { try { if (BeforeLoadEvent != null) { BeforeLoadEvent(); } if (fv.Major > 0) { while (PlayTimer.Enabled) { PlayTimer.Stop(); } fs.Seek(0, System.IO.SeekOrigin.Begin); Version loadedfv = (Version)FileVersion.Load(fv, fs, null); while (StockIndexes.Count > 0) { StockIndexes.Clear(); } while (Stocks.Count > 0) { Stocks.Clear(); } while (Players.Count > 0) { Players.Clear(); } MarketState.Reset(Random); CurrentPlayer = null; StockIndexes.Load(loadedfv, fs, null); Stocks.Load(loadedfv, fs, StockIndexes); CurrentPlayer = (Player)Players.Load(loadedfv, fs, Stocks); MarketState.Load(loadedfv, fs, null); FileName = fs.Name; while (!PlayTimer.Enabled) { PlayTimer.Start(); } } if (AfterLoadEvent != null) { AfterLoadEvent(); } if (UpdateStockInformationsEvent != null) { UpdateStockInformationsEvent(); } if (UpdatePlayerInformationsEvent != null) { UpdatePlayerInformationsEvent(); } return(this); } catch (VersionNotSupportedException ex) { while (!PlayTimer.Enabled) { PlayTimer.Start(); } throw ex; } catch (System.Exception ex) { while (!PlayTimer.Enabled) { PlayTimer.Start(); } throw ex; } }
public void Dispose(bool disposing) { try { if (!Disposed) { if (PlayTimer != null) { while (PlayTimer.Enabled) { PlayTimer.Stop(); } } if (disposing) { if (Random != null) { Random = null; } if (StockIndexes != null) { while (StockIndexes.Count > 0) { StockIndexes.Clear(); } StockIndexes = null; } if (Stocks != null) { while (Stocks.Count > 0) { Stocks.Clear(); } Stocks = null; } if (Players != null) { while (Players.Count > 0) { Players.Clear(); } Players = null; } if (MarketState != null) { MarketState = null; } if (CurrentPlayer != null) { CurrentPlayer = null; } if (SynchronizeRoot != null) { SynchronizeRoot = null; } if (PlayTimer != null) { PlayTimer.Dispose(); } if (BeforeResetEvent != null) { BeforeResetEvent = null; } if (AfterResetEvent != null) { AfterResetEvent = null; } if (BeforeLoadEvent != null) { BeforeLoadEvent = null; } if (AfterLoadEvent != null) { AfterLoadEvent = null; } if (BeforeSaveEvent != null) { BeforeSaveEvent = null; } if (AfterSaveEvent != null) { AfterSaveEvent = null; } if (UpdateStockInformationsEvent != null) { UpdateStockInformationsEvent = null; } if (UpdatePlayerInformationsEvent != null) { UpdatePlayerInformationsEvent = null; } } Disposed = true; } } catch (System.Exception ex) { throw ex; } }