private static ulong ParseXProLiveCasinoGameList(ceDomainConfigEx domain) { try { using (GamMatrixClient client = new GamMatrixClient()) { XProGamingAPIRequest request = new XProGamingAPIRequest() { GetGamesListWithLimits = true, GetGamesListWithLimitsGameType = (int)XProGaming.GameType.AllGames, GetGamesListWithLimitsOnlineOnly = 0, //GetGamesListWithLimitsUserName = "******" }; request = client.SingleRequest <XProGamingAPIRequest>(domain.DomainID, request); if (string.IsNullOrWhiteSpace(request.GetGamesListWithLimitsResponse)) { return(0L); } string xml = request.GetGamesListWithLimitsResponse; XProGaming.Game.ParseXml(domain.DomainID, xml); return(CRC64.ComputeAsAsciiString(xml)); } } catch (GmException gex) { if (gex.ReplyResponse.ErrorCode == "SYS_1008") { return(0L); } Logger.Exception(gex); } catch (Exception ex) { Logger.Exception(ex); } return(0L); }
public ContentResult RawXml(string apiUsername, string vendor, string username) { if (string.IsNullOrWhiteSpace(apiUsername)) { return(WrapResponse(ResultCode.Error_InvalidParameter, "Operator is NULL!")); } var domains = DomainManager.GetApiUsername_DomainDictionary(); ceDomainConfigEx domain; if (!domains.TryGetValue(apiUsername.Trim(), out domain)) { return(WrapResponse(ResultCode.Error_InvalidParameter, "Operator is invalid!")); } if (!IsWhitelistedIPAddress(domain, Request.GetRealUserAddress())) { return(WrapResponse(ResultCode.Error_BlockedIPAddress, string.Format("IP Address [{0}] is denied!", Request.GetRealUserAddress()))); } try { if (string.Equals(vendor, "IGT", StringComparison.InvariantCultureIgnoreCase)) { using (GamMatrixClient client = new GamMatrixClient()) { IGTAPIRequest request = new IGTAPIRequest() { GameListV2 = true, }; request = client.SingleRequest <IGTAPIRequest>(domain.DomainID, request); return(this.Content(request.GameListV2Response, "text/xml")); } } else if (string.Equals(vendor, "IGTgames", StringComparison.InvariantCultureIgnoreCase)) { Dictionary <string, IGTIntegration.Game> games = GamMatrixClient.GetIGTGames(domain.DomainID); StringBuilder output = new StringBuilder(); foreach (var game in games) { output.AppendFormat("{0} {1}\n", game.Key, game.Value.Title); } return(this.Content(output.ToString(), "text/plain")); } else if (string.Equals(vendor, "GTgameInfo", StringComparison.InvariantCultureIgnoreCase)) { GreenTubeAPIRequest request = new GreenTubeAPIRequest() { ArticlesGetRequest = new GreentubeArticlesGetRequest() { LanguageCode = "EN" } }; using (GamMatrixClient client = new GamMatrixClient()) { request = client.SingleRequest <GreenTubeAPIRequest>(domain.DomainID, request); DataContractSerializer dcs = new DataContractSerializer(request.ArticlesGetResponse.GetType()); using (MemoryStream ms = new MemoryStream()) { dcs.WriteObject(ms, request.ArticlesGetResponse); byte[] buffer = ms.ToArray(); return(this.Content(Encoding.UTF8.GetString(buffer, 0, buffer.Length) , "text/xml" )); } } } else if (string.Equals(vendor, "XPRO", StringComparison.InvariantCultureIgnoreCase)) { XProGamingAPIRequest request = new XProGamingAPIRequest() { GetGamesListWithLimits = true, GetGamesListWithLimitsGameType = (int)XProGaming.GameType.AllGames, GetGamesListWithLimitsOnlineOnly = 0, GetGamesListWithLimitsUserName = username, GetUserCurrency = true, GetUserCurrencyUserName = username, }; using (GamMatrixClient client = new GamMatrixClient()) { request = client.SingleRequest <XProGamingAPIRequest>(domain.DomainID, request); StringBuilder output = new StringBuilder(); output.AppendFormat("XProGamingAPIRequest.GetUserCurrencyResponse = [{0}]" , request.GetUserCurrencyResponse ); output.AppendLine(); output.AppendLine(); output.Append("XProGamingAPIRequest.GetGamesListWithLimitsResponse = \n"); using (StringWriter sw = new StringWriter()) { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml(request.GetGamesListWithLimitsResponse); doc.Save(sw); output.Append(sw.ToString()); } return(this.Content(output.ToString(), "text/plain")); } } //else if (string.Equals(vendor, "BALLY", StringComparison.InvariantCultureIgnoreCase)) //{ // BallyGetGamesListRequest request = new BallyGetGamesListRequest(); // using (GamMatrixClient client = new GamMatrixClient()) // { // request = client.SingleRequest<BallyGetGamesListRequest>(domain.DomainID, request); // DataContractSerializer formatter = new DataContractSerializer(request.Games.GetType()); // using (MemoryStream ms = new MemoryStream()) // { // formatter.WriteObject(ms, request.Games); // string xml = Encoding.UTF8.GetString(ms.ToArray()); // return this.Content(xml, "text/plain"); // } // } //} //else if (string.Equals(vendor, "ISoftBet", StringComparison.InvariantCultureIgnoreCase)) //{ // List<ISoftBetIntegration.Game> list = ISoftBetIntegration.GameMgt.LoadRawGameFeedsForSpecialLanguage(domain,"en").Values.ToList(); // DataContractSerializer formatter = new DataContractSerializer(typeof(List<ISoftBetIntegration.Game>)); // using (MemoryStream ms = new MemoryStream()) // { // formatter.WriteObject(ms, list); // string xml = Encoding.UTF8.GetString(ms.ToArray()); // return this.Content(xml, "text/xml"); // } //} else if (string.Equals(vendor, "Vivo", StringComparison.InvariantCultureIgnoreCase)) { Dictionary <string, string> dicGameName = new Dictionary <string, string>(); dicGameName.Add("Baccarat", "Baccarat"); dicGameName.Add("Roulette", "Roulette"); dicGameName.Add("Blackjack", "Blackjack"); long operatorID = 0; long.TryParse(domain.GetCfg(CE.DomainConfig.Vivo.OperatorID), out operatorID); string vivoWebServiceUrl = domain.GetCfg(CE.DomainConfig.Vivo.VivoWebServiceUrl); List <VivoActiveTable> vivoTables; Type t = typeof(VivoActiveTable); PropertyInfo[] properties = t.GetProperties(); StringBuilder xml = new StringBuilder(); xml.AppendLine(@"<?xml version=""1.0"" encoding=""ISO-8859-1""?>"); xml.AppendLine(@"<root>"); foreach (string key in dicGameName.Keys) { vivoTables = VivoAPI.LiveCasinoTable.GetActiveTables(vivoWebServiceUrl, domain.DomainID, operatorID, dicGameName[key], "EUR"); if (vivoTables != null) { xml.AppendLine(string.Format("<{0}>", key)); foreach (VivoActiveTable table in vivoTables) { xml.AppendLine(string.Format("<table-{0}>", table.TableID)); foreach (PropertyInfo p in properties) { xml.AppendLine(string.Format("<{0}>{1}</{0}>", p.Name, p.GetValue(table).ToString())); } xml.AppendLine(string.Format("</table-{0}>", table.TableID)); } xml.AppendLine(string.Format("</{0}>", key)); } } xml.AppendLine(@"</root>"); return(this.Content(xml.ToString(), "text/xml")); } else if (string.Equals(vendor, "RecentWinners", StringComparison.InvariantCultureIgnoreCase)) { string sql = DwAccessor.GetCasinoGameRecentWinnersInternalSql(domain, false); return(this.Content(sql, "text/plain")); } else if (string.Equals(vendor, "GreenTube", StringComparison.InvariantCultureIgnoreCase)) { using (GamMatrixClient client = new GamMatrixClient()) { GreenTubeAPIRequest request = new GreenTubeAPIRequest() { ArticlesGetRequest = new GreentubeArticlesGetRequest() { LanguageCode = "EN" } }; request = client.SingleRequest <GreenTubeAPIRequest>(domain.DomainID, request); DataContractSerializer formatter = new DataContractSerializer(request.ArticlesGetResponse.GetType()); using (MemoryStream ms = new MemoryStream()) { formatter.WriteObject(ms, request.ArticlesGetResponse); string xml = Encoding.UTF8.GetString(ms.ToArray()); return(this.Content(xml, "text/xml")); } } } else { throw new NotSupportedException(); } } catch (Exception ex) { return(this.Content(ex.Message)); } }
public ContentResult GetLiveCasinoTableStatus(string apiUsername, string callback) { if (string.IsNullOrWhiteSpace(apiUsername)) { return(WrapResponse(ResultCode.Error_InvalidParameter, "Operator is NULL!")); } var domains = DomainManager.GetApiUsername_DomainDictionary(); ceDomainConfigEx domain; if (!domains.TryGetValue(apiUsername.Trim(), out domain)) { return(WrapResponse(ResultCode.Error_InvalidParameter, "Operator is invalid!")); } Dictionary <string, LiveCasinoSeat> seats = new Dictionary <string, LiveCasinoSeat>(); DomainManager.CurrentDomainID = domain.DomainID; string cacheKey = string.Format("RestfulApiController.GetLiveCasinoTableStatus.LiveCasinoDic.{0}", domain.DomainID); List <ceLiveCasinoTableBaseEx> tables = null; { tables = HttpRuntime.Cache[cacheKey] as List <ceLiveCasinoTableBaseEx>; if (tables == null) { tables = LiveCasinoTableAccessor.GetDomainTables(domain.DomainID, null, true, true); HttpRuntime.Cache.Insert(cacheKey, tables, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero); } } List <ceLiveCasinoTableBaseEx> xproTables = tables.Where(t => t.VendorID == VendorID.XProGaming).ToList(); if (xproTables.Count > 0) { XProGamingAPIRequest request = new XProGamingAPIRequest() { GetGamesListWithLimits = true, GetGamesListWithLimitsGameType = (int)XProGaming.GameType.AllGames, GetGamesListWithLimitsOnlineOnly = 0, GetGamesListWithLimitsCurrency = "EUR", //GetGamesListWithLimitsUserName = "******", }; using (GamMatrixClient client = new GamMatrixClient()) { request = client.SingleRequest <XProGamingAPIRequest>(domain.DomainID, request); } /* * <response xmlns="apiGamesLimitsListData" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> * <gamesList> * <game> * <limitSetList> * <limitSet> * <limitSetID>1</limitSetID> * <minBet>0.00</minBet> * <maxBet>800.00</maxBet> * </limitSet> * <limitSet> * <limitSetID>45</limitSetID> * <minBet>1.00</minBet> * <maxBet>5.00</maxBet> * </limitSet> * </limitSetList> * <gameID>3</gameID> * <gameType>1</gameType> * <gameName>Dragon Roulette LCPP</gameName> * <dealerName>Dealer</dealerName> * <dealerImageUrl>http://lcpp.xprogaming.com/LiveGames/Games/dealers/1.jpg</dealerImageUrl> * <isOpen>1</isOpen> * <connectionUrl>https://lcpp.xprogaming.com/LiveGames/GeneralGame.aspx?audienceType=1&gameID=3&operatorID=47&languageID={1}&loginToken={2}&securityCode={3}</connectionUrl> * <winParams>'width=955,height=690,menubar=no, scrollbars=no,toolbar=no,status=no,location=no,directories=no,resizable=yes,left=' + (screen.width - 955) / 2 + ',top=20'</winParams> * <openHour>00:00</openHour> * <closeHour>23:59</closeHour> * <PlayersNumber xsi:nil="true" /> * <PlayersNumberInGame xsi:nil="true" /> * </game> * <errorCode>0</errorCode> * <description /> * </response> */ XElement root = XElement.Parse(request.GetGamesListWithLimitsResponse); XNamespace ns = root.GetDefaultNamespace(); if (root.Element(ns + "errorCode").Value != "0") { throw new Exception(root.Element(ns + "description").Value); } IEnumerable <XElement> games = root.Element(ns + "gamesList").Elements(ns + "game"); foreach (XElement game in games) { string gameID = game.Element(ns + "gameID").Value; XElement playersNumberElement = game.Element(ns + "PlayersNumber"); XElement playersNumberInGameElement = game.Element(ns + "PlayersNumberInGame"); if (playersNumberElement == null || playersNumberInGameElement == null || playersNumberElement.Value == null || playersNumberInGameElement.Value == null) { continue; } int seatTaken = 0, totalSeats = 0; if (!int.TryParse(playersNumberElement.Value, out totalSeats) || !int.TryParse(playersNumberInGameElement.Value, out seatTaken)) { continue; } foreach (ceLiveCasinoTableBaseEx xproTable in xproTables.Where(t => t.GameID == gameID)) { seats.Add(xproTable.ID.ToString() , new LiveCasinoSeat() { TakenSeats = seatTaken, TotalSeats = totalSeats } ); } } } List <ceLiveCasinoTableBaseEx> netentTables = tables.Where(t => t.VendorID == VendorID.NetEnt).ToList(); if (netentTables.Count > 0) { string url = domain.GetCfg(CE.DomainConfig.NetEnt.LiveCasinoQueryOpenTablesApiURL); url = string.Format(url, "EUR"); HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; request.Accept = "application/json"; request.ContentType = "application/json"; request.Method = "POST"; HttpWebResponse response = request.GetResponse() as HttpWebResponse; using (Stream s = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(s)) { string json = sr.ReadToEnd(); JavaScriptSerializer jss = new JavaScriptSerializer(); NetEntAPI.RawNetEntLiveCasinoTable[] rawTables = jss.Deserialize <NetEntAPI.RawNetEntLiveCasinoTable[]>(json); foreach (var rawTable in rawTables) { if (rawTable.Games.Length == 0 || rawTable.Slots.Length == 0) { continue; } string gameID = rawTable.Games[0].GameID; ceLiveCasinoTableBaseEx netentTable = netentTables.FirstOrDefault(t => t.GameID == gameID); if (netentTable == null) { continue; } int seatTaken = rawTable.Slots.Count(slot => slot.Available == false); int totalSeats = rawTable.Slots.Length; seats.Add(netentTable.ID.ToString() , new LiveCasinoSeat() { TakenSeats = seatTaken, TotalSeats = totalSeats } ); } } } } DataContractJsonSerializer serializer = new DataContractJsonSerializer(seats.GetType() , new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true } ); string jsonp; using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, seats); string json = Encoding.UTF8.GetString(ms.ToArray()); jsonp = string.Format("{0}({1})", callback, json); } return(this.Content(jsonp)); }