Example #1
0
 /// <summary>
 /// Get Sqlite DB Query string
 /// </summary>
 /// <param name="cmd">array Query string</param>
 /// <param name="cReq">enum ClanTypeReq</param>
 /// <param name="LogError">Log Error <code>Action{string}</code></param>
 /// <returns>DB query syting</returns>
 public string GetQueryString(
     string[] cmd,
     ref stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq cReq,
     StringCollection hide,
     Action <string> LogError
     )
 {
     return(CoCAPI.CoCDB._GetQueryString(cmd, ref cReq, hide, LogError));
 }
Example #2
0
        /// <summary>
        /// Default No IRC flood exceed error timeout 750ms
        /// </summary>

        #region CMD Clash of Clan

        private void PluginClan(bool isPrivate, string channel, string nik, string [] cmd, string cmds)
        {
            if (this.Conf.Api == null)
            {
                this._SendNotice(nik, (string)Properties.Resources.ResourceManager.GetString("cmdNoSQL", this._ci));
                return;
            }

            isPrivate = true;
            string        query  = null;
            List <string> txtout = new List <string>();

            stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None;

            try
            {
                query = this.Conf.Api.GetQueryString(cmd, ref cReq, this.Conf.Opt.SQLDBFilterMemberTag.collection, this.Conf.ILog.LogError);

#if DEBUG_PluginClanQuery
                stConsole.WriteHeader("Plugin Clan Query: " + query);
#endif

                if (string.IsNullOrWhiteSpace(query))
                {
                    throw new ArgumentNullException((string)Properties.Resources.ResourceManager.GetString("cmdIrcQueryEmpty", this._ci));
                }
            }
            catch (CoCDBException e)
            {
                string msg;

                switch (e.enumId)
                {
                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtNone:
                {
                    msg = ((string.IsNullOrWhiteSpace(e.Message)) ? null : e.Message);
                    break;
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtClanHelp:
                {
                    msg = (string)Properties.Resources.ResourceManager.GetString("fmtClanHelp", this._ci);
                    break;
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtClanPlayerHelp:
                {
                    msg = (string)Properties.Resources.ResourceManager.GetString("fmtClanPlayerHelp", this._ci);
                    break;
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtWarLog:
                {
                    msg = (string)Properties.Resources.ResourceManager.GetString("fmtWarLogHelp", this._ci);
                    break;
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtWarLast:
                {
                    msg = (string)Properties.Resources.ResourceManager.GetString("fmtWarLastHelp", this._ci);
                    break;
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtDonation:
                {
                    msg = (string)Properties.Resources.ResourceManager.GetString("fmtClanDonationHelp", this._ci);
                    break;
                }

                default:
                {
                    msg = null;
                    break;
                }
                }
                if (!string.IsNullOrWhiteSpace(msg))
                {
                    this._SendNotice(nik, msg);
                    return;
                }
            }
            catch (Exception e)
            {
                this._SendNotice(nik, e.Message);
                return;
            }
            if (
                (cReq == stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None) ||
                (string.IsNullOrWhiteSpace(query))
                )
            {
                this._SendNotice(nik,
                                 ((cReq == stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None) ?
                                  (string)Properties.Resources.ResourceManager.GetString("cmdQueryWrong", this._ci) :
                                  (string)Properties.Resources.ResourceManager.GetString("cmdQueryError", this._ci)
                                 )
                                 );
                return;
            }

            DataTable dTable = null;

            try
            {
                dTable = this.Conf.Api.QueryData(query);

#if DEBUG_DataTablePrint
                dTable.DataTableToPrint();
#endif
            }
            catch (Exception e)
            {
                if (dTable != null)
                {
                    dTable.Dispose();
                }
                this._SendNotice(nik, e.Message);
                return;
            }
            if ((dTable == null) || (dTable.Rows.Count == 0))
            {
                this._SendNotice(nik, (string)Properties.Resources.ResourceManager.GetString("cmdQueryEmpty", this._ci));
                return;
            }
            switch (cReq)
            {
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.List:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtMembersTotal", this._ci),
                        dTable.Rows.Count.ToString()
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationSend:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtClanDonation", this._ci),
                        dTable.Rows.Count.ToString(),
                        "sender"
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationReceive:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtClanDonation", this._ci),
                        dTable.Rows.Count.ToString(),
                        "reciver"
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationRatio:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtClanDonation", this._ci),
                        dTable.Rows.Count.ToString(),
                        "ratio"
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationTotal:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtClanDonation", this._ci),
                        dTable.Rows.Count.ToString(),
                        "total"
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLog:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLast:
            {
                txtout.Add(
                    string.Format(
                        (string)Properties.Resources.ResourceManager.GetString("fmtClanWar", this._ci),
                        dTable.Rows.Count.ToString()
                        ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkViolet)
                    );
                break;
            }
            }
            switch (cReq)
            {
            default:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None:
            {
                dTable.Dispose();
                this._SendNotice(nik, (string)Properties.Resources.ResourceManager.GetString("cmdQueryWrong", this._ci));
                return;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Info:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            " Clan: ", (string)row["name"],
                            " / Level: ", ((Int64)row["level"]).ToString(),
                            " / Country: ", (string)row["locname"],
                            " | Tag: ", (string)row["tag"],
                            " | Members: ", ((Int64)row["members"]).ToString(), "/50 "
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkGray)
                        );
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.War:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            " Clan: ", (string)row["name"],
                            " | War freq: ", (string)row["warfreq"],
                            " | War win: ", ((Int64)row["warwin"]).ToString(),
                            " | War strenght: ", ((Int64)row["warstr"]).ToString(),
                            " | War public: ",
                            ((
                                 ((Int64)row["warpub"]).Equals(1)
                                 ) ?
                             (string)Properties.Resources.ResourceManager.GetString("prnYes", this._ci) :
                             (string)Properties.Resources.ResourceManager.GetString("prnNo", this._ci)
                            )
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkGray)
                        );
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLog:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLast:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            " ", ((DateTime)row["dtend"]).ToString(),
                            " : ", (string)row["result"],
                            " | \"", (string)row["cname"],
                            "\" (", ((Int64)row["clevel"]).ToString(),
                            ") vs \"", (string)row["opname"],
                            "\" (", ((Int64)row["oplevel"]).ToString(),
                            ") <", ((Int64)row["members"]).ToString(),
                            "> | attacks: ", ((Int64)row["cattacks"]).ToString(), "/", ((Int64)row["opattacks"]).ToString(),
                            " | stars: ", ((Int64)row["cstars"]).ToString(), "/", ((Int64)row["opstars"]).ToString(),
                            " | destruct: ", ((System.Single)row["cdestruct"]).ToString(), "/", ((System.Single)row["opdestruct"]).ToString()
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkGray)
                        );
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Statistic:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            " Clan: ", (string)row["name"],
                            " | Type: ", (string)row["type"],
                            " | Points: ", ((Int64)row["points"]).ToString(),
                            " | Needed trophies: ", ((Int64)row["trophies"]).ToString()
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkGray)
                        );
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Description:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            " Clan: ", (string)row["name"],
                            " | Description: \"", (string)row["desc"], "\""
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkBlue)
                        );
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.List:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Player:
            {
                int i = 1;
                txtout.Add(
                    ((string)Properties.Resources.ResourceManager.GetString("fmtAnswerList", this._ci)).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.Orange)
                    );
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            ((i < 10) ? "  " : "") + i.ToString(), " | ",
                            CreateString.Build(
                                new string[] {
                                " ",
                                (string)row["nik"], " | ",
                                (string)row["tag"], " | ",
                                ((Int64)row["level"]).ToString(), " | ",
                                ((Int64)row["rank"]).ToString(), "/", ((Int64)row["prank"]).ToString(), " | ",
                                ((Int64)row["trophies"]).ToString(), " | '",
                                (string)row["league"], "' | '",
                                (string)row["role"], "' | ",
                                ((Int64)row["send"]).ToString(), " | ",
                                ((Int64)row["receive"]).ToString(), " | ",
                                ((System.Single)row["ratio"]).ToString(), " | "
                            }
                                ).ColorText(IrcFormatText.Color.Black, IrcFormatText.Color.LightGray)
                        },
                            null,
                            this.Conf.ILog.LogError
                            )
                        );
                    i++;
                }
#if DEBUG_ListPrint
                foreach (string str in txtout)
                {
                    stConsole.WriteLine(str);
                }
#endif
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationSend:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationReceive:
            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationRatio:
            {
                int i = 1;
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            i.ToString(), " | ",
                            CreateString.Build(
                                new string[] {
                                " ",
                                (string)row["nik"], " | '",
                                (string)row["role"], "' | ",
                                ((Int64)row["send"]).ToString(), " | ",
                                ((Int64)row["receive"]).ToString(), " | ",
                                ((System.Single)row["ratio"]).ToString(), " | "
                            }
                                ).ColorText(IrcFormatText.Color.Black, IrcFormatText.Color.LightGray)
                        },
                            null,
                            this.Conf.ILog.LogError
                            )
                        );
                    i++;
                }
                break;
            }

            case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationTotal:
            {
                foreach (DataRow row in dTable.Rows)
                {
                    txtout.Add(
                        CreateString.Build(
                            new string[] {
                            "   Total send in Clan: ", ((Int64)row["tsend"]).ToString(),
                            " | Total recive in Clan: ", ((Int64)row["treceive"]).ToString(),
                            " | Total send  out Clan: ", ((Int64)row["tsend"] - (Int64)row["treceive"]).ToString(),
                            "   "
                        },
                            null,
                            this.Conf.ILog.LogError
                            ).ColorText(IrcFormatText.Color.White, IrcFormatText.Color.DarkBlue)
                        );
                }
                break;
            }
            }

            dTable.Dispose();

            if (txtout.Count == 0)
            {
                this._SendNotice(nik, (string)Properties.Resources.ResourceManager.GetString("cmdQueryEmpty", this._ci));
            }
            else
            {
                Task.Factory.StartNew(() =>
                {
                    AutoResetEvent are = new AutoResetEvent(false);
                    foreach (string str in txtout)
                    {
                        if (!string.IsNullOrWhiteSpace(str))
                        {
                            this._SendFromTask(isPrivate, channel, nik, str);
                            are.WaitOne(TimeSpan.FromMilliseconds(this.Conf.Opt.IRCFloodTimeOut.num), true);
                        }
                    }
                    are.Close();
                    are.Dispose();
                });
            }
        }
Example #3
0
        public static void InformerWebRequest(string url, object ctx, object udata)
        {
            stCoCServerConfig.CoCServerConfigData.Configuration conf = udata as stCoCServerConfig.CoCServerConfigData.Configuration;
            HttpListenerContext context = ctx as HttpListenerContext;

            stCoCAPI.CoCAPI.CoCEnum.CoCFmtReq reqtype = stCoCAPI.CoCAPI.CoCEnum.CoCFmtReq.None;

            if (
                (udata == null) ||
                (conf.HttpSrv == null)
                )
            {
                context.Response.Abort();
                return;
            }
            if (
                (conf.Api == null) ||
                (!conf.Api.DBCheck())
                )
            {
                CoCWebSrv._ErrorHtmlDefault(
                    conf,
                    HttpStatusCode.InternalServerError,
                    String.Empty,
                    context
                    );
                return;
            }

            Int32 idx = 0, resize = 2;

            byte[]   msg     = null;
            string[] urlPart = url.Split('/');
            urlPart = urlPart.Skip(1).Concat(urlPart.Take(1)).ToArray();
            Array.Resize(ref urlPart, urlPart.Length - 1);
            string memberId = "",
                   langid   = stNet.stWebServerUtil.HttpUtil.GetHttpPreferedLanguage(context.Request.UserLanguages);

            try
            {
                if (urlPart.Length < 3)
                {
                    throw new ArgumentOutOfRangeException();
                }
                if (!Int32.TryParse(urlPart[2], out idx))
                {
                    throw new ArgumentOutOfRangeException();
                }
                switch (urlPart[1])
                {
                case "info":
                case "clan":
                {
                    reqtype = stCoCAPI.CoCAPI.CoCEnum.CoCFmtReq.Clan;
                    if (urlPart.Length != 4)
                    {
                        throw new ArgumentOutOfRangeException();
                    }
                    break;
                }

                case "player":
                case "member":
                {
                    reqtype = stCoCAPI.CoCAPI.CoCEnum.CoCFmtReq.Members;
                    if (urlPart.Length != 5)
                    {
                        throw new ArgumentOutOfRangeException();
                    }
                    if (urlPart[3].Equals("random"))
                    {
                        urlPart[1] = urlPart[3];
                        resize     = 3;
                    }
                    else
                    {
                        if ((urlPart[3].Length > 12) || (urlPart[3].Length < 6))
                        {
                            throw new ArgumentOutOfRangeException();
                        }
                        urlPart[2] = urlPart[3];
                    }
                    memberId = urlPart[3];
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException();
                }
                }
                Array.Resize(ref urlPart, urlPart.Length - resize);
            }
            catch (Exception)
            {
                conf.HttpSrv.BadRequestRaw(conf.Api.InformerImageError(reqtype, langid), context, (int)HttpStatusCode.BadRequest, HttpUtil.MimeType.MimePng);
                return;
            }
            try
            {
                stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None;
                string query = string.Empty;
                try
                {
                    query = conf.Api.GetQueryString(urlPart, ref cReq, conf.Opt.SQLDBFilterMemberTag.collection, conf.ILog.LogError);
                    if (
                        (cReq == stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None) ||
                        (string.IsNullOrWhiteSpace(query))
                        )
                    {
                        throw new ArgumentNullException();
                    }
                }
                catch (Exception)
                {
                    throw new ArgumentException();
                }

#if DEBUG_PrintWebRequest
                stConsole.WriteHeader("InformerWebRequest -> URL: (" + url + ") Query: (" + query + ")");
#endif
                DataTable dt = conf.Api.QueryData(query);
                if ((dt == null) || (dt.Rows.Count == 0))
                {
                    throw new ArgumentNullException();
                }
#if DEBUG_PrintJson
                stConsole.WriteHeader("InformerWebRequest -> JSON: " + dt.ToJson(false, false));
#endif
#if DEBUG_PrintDataTable
                dt.DataTableToPrint();
#endif
                msg = conf.Api.InformerImageGet(dt.Rows[0], reqtype, idx, memberId, langid, conf.Opt.WEBCacheEnable.bval);

#if DEBUG_PrintImageInfo
                stConsole.WriteHeader("InformerWebRequest -> ImageInfo: " + msg.Length);
#endif
            }
            catch (Exception)
            {
                conf.HttpSrv.BadRequestRaw(
                    conf.Api.InformerImageError(stCoCAPI.CoCAPI.CoCEnum.CoCFmtReq.Auth, langid),
                    context,
                    (int)HttpStatusCode.InternalServerError,
                    HttpUtil.MimeType.MimePng
                    );
                return;
            }
            try
            {
#if DEBUG_NoCache
                context.Response.AddHeader(conf.HttpSrv.httpCacheControl, "no-cache");
                context.Response.AddHeader(conf.HttpSrv.httpAccelBuffering, "no");
#else
                context.Response.AddHeader(conf.HttpSrv.httpCacheControl, "max-age=" + conf.Api.UpdateNextSeconds.ToString() + ", public");
                context.Response.AddHeader(conf.HttpSrv.httpAccelBuffering, "yes");
                context.Response.AddHeader(conf.HttpSrv.httpLastModified, conf.Api.UpdateLastTime.ToString("R"));
#endif
                context.Response.AddHeader(conf.HttpSrv.httpContentType, HttpUtil.GetMimeType("", HttpUtil.MimeType.MimePng));
                context.Response.AddHeader(conf.HttpSrv.httpAccessControlAllowOrigin, "*");
                context.Response.ContentLength64 = msg.Length;
                context.Response.OutputStream.Write(msg, 0, msg.Length);
                context.Response.OutputStream.Close();
            }
#if DEBUG
            catch (Exception e)
            {
                conf.ILog.LogError(
                    string.Format(
                        Properties.Resources.fmtMainError,
                        string.Format(fmtClassName, "Informer"),
                        e.GetType().Name,
                        e.Message
                        )
                    );
#else
            catch (Exception)
            {
#endif
                context.Response.Abort();
                return;
            }
            context.Response.Close();
        }
Example #4
0
            /// <summary>
            /// Get Sqlite DB Query string
            /// </summary>
            /// <param name="cmd">array Query string</param>
            /// <param name="cReq">enum ClanTypeReq</param>
            /// <param name="LogError">Log Error <code>Action{string}</code></param>
            /// <returns>DB query syting</returns>
            public static string _GetQueryString(
                string[] cmd,
                ref stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq cReq,
                StringCollection hide,
                Action <string> LogError
                )
            {
                cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None;
                string query    = String.Empty,
                       playerId = "";

                switch (cmd.Length)
                {
                default:
                case 0:
                case 1:
                {
                    throw new CoCDBException(
                              stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtClanHelp,
                              string.Format(
                                  Properties.Resources.CoCDBExceptionLength,
                                  "QueryString->begin"
                                  )
                              );
                }

                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                {
                    int idx = 1;
                    if (cmd[1].Equals("setup"))
                    {
                        cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.ServerSetup;
                        return(String.Empty);
                    }
                    else if (cmd[1].Equals("notify"))
                    {
                        cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None;
                        throw new CoCDBException(
                                  stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtNone,
                                  CoCDB.thisClass
                                  );
                    }
                    else if ((cmd[1].Equals("info")) || (cmd[1].Equals("clan")))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Info;
                        query = Properties.Settings.Default.DBSelectClanInfo;
                    }
                    else if (cmd[1].Equals("war"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.War;
                        query = Properties.Settings.Default.DBSelectClanInfo;
                    }
                    else if (cmd[1].Equals("stat"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Statistic;
                        query = Properties.Settings.Default.DBSelectClanInfo;
                    }
                    else if (cmd[1].Equals("desc"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Description;
                        query = Properties.Settings.Default.DBSelectClanInfo;
                    }
                    else if (cmd[1].Equals("warlog"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLog;
                        query = Properties.Settings.Default.DBSelectWarClan;
                    }
                    else if (cmd[1].Equals("warlast"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.WarLast;
                        query = CreateString.Build(
                            new string[] {
                                Properties.Settings.Default.DBSelectWarClan,
                                Properties.Settings.Default.DBSelectWarLast
                            }, " ",
                            LogError);
                    }
                    else if (cmd[1].Equals("list"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.List;
                        query = CreateString.Build(
                            new string[] {
                                string.Format(
                                    Properties.Settings.Default.DBSelectMember, 1
                                    ),
                                CoCSeason.GetSeasonDateDB(idx, cmd),
                                CoCDB._GetHideTagSelect(hide),
                                Properties.Settings.Default.DBSelectMemberListOrder
                            }, " ",
                            LogError);
                    }
                    else if (cmd[1].Equals("random"))
                    {
                        cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Player;
                        query = CreateString.Build(
                            new string[] {
                                string.Format(
                                    Properties.Settings.Default.DBSelectMember, 1
                                    ),
                                CoCSeason.GetSeasonDateDB(idx, cmd),
                                CoCDB._GetHideTagSelect(hide),
                                Properties.Settings.Default.DBSelectMemberRand
                            }, " ",
                            LogError);
                    }
                    else if ((cmd[1].Equals("player")) || (cmd[1].Equals("member")))
                    {
                        if (cmd.Length == 2)
                        {
                            throw new CoCDBException(
                                      stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtClanPlayerHelp,
                                      string.Format(
                                          Properties.Resources.CoCDBExceptionLength,
                                          "QueryString->player"
                                          )
                                      );
                        }
                        idx++;
                        cReq     = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.Player;
                        playerId = ((cmd[2].StartsWith("#")) ? cmd[2].Substring(1) : cmd[2]);
                        query    = CreateString.Build(
                            new string[] {
                                string.Format(
                                    Properties.Settings.Default.DBSelectMember, 1
                                    ),
                                CoCSeason.GetSeasonDateDB(idx, cmd),
                                CoCDB._GetHideTagSelect(hide),
                                // add
                                string.Format(
                                    Properties.Settings.Default.DBSelectMemberTag,
                                    playerId
                                    )
                            }, " ",
                            LogError);
                    }
                    else if (cmd[1].Equals("donation"))
                    {
                        if (cmd.Length > 2)
                        {
                            if (cmd[2].Equals("send"))
                            {
                                cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationSend;
                                query = CreateString.Build(
                                    new string[] {
                                        Properties.Settings.Default.DBSelectDonation,
                                        CoCSeason.GetSeasonDateDB(idx, cmd),
                                        CoCDB._GetHideTagSelect(hide),
                                        Properties.Settings.Default.DBSelectDonationSendOrder
                                    }, " ",
                                    LogError);
                                idx++;
                            }
                            else if (cmd[2].Equals("receive"))
                            {
                                cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationReceive;
                                query = CreateString.Build(
                                    new string[] {
                                        Properties.Settings.Default.DBSelectDonation,
                                        CoCSeason.GetSeasonDateDB(idx, cmd),
                                        CoCDB._GetHideTagSelect(hide),
                                        Properties.Settings.Default.DBSelectDonationReceiveOrder
                                    }, " ",
                                    LogError);
                                idx++;
                            }
                            else if ((cmd[2].Equals("ratio")) || (cmd[2].Equals("rate")))
                            {
                                cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationRatio;
                                query = CreateString.Build(
                                    new string[] {
                                        Properties.Settings.Default.DBSelectDonation,
                                        Properties.Settings.Default.DBSelectDonationRatio,
                                        CoCSeason.GetSeasonDateDB(idx, cmd),
                                        CoCDB._GetHideTagSelect(hide),
                                        Properties.Settings.Default.DBSelectDonationRatioOrder
                                    }, " ",
                                    LogError);
                                idx++;
                            }
                            else if (cmd[2].Equals("total"))
                            {
                                cReq  = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationTotal;
                                query = CreateString.Build(
                                    new string[] {
                                        Properties.Settings.Default.DBSelectDonationTotal,
                                        CoCSeason.GetSeasonDateDB(idx, cmd)
                                    }, " ",
                                    LogError);
                                idx++;
                            }
                        }
                        else
                        {
                            cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.DonationSend;
                            throw new CoCDBException(
                                      stCoCAPI.CoCAPI.CoCEnum.ClanFmtReq.fmtDonation,
                                      CoCDB.thisClass
                                      );
                        }
                    }
                    else
                    {
                        return(String.Empty);
                    }
                    return(query);
                }
                }
            }
Example #5
0
        public static void JsonWebRequest(string url, object ctx, object udata)
        {
            byte[] msg;
            stCoCServerConfig.CoCServerConfigData.Configuration conf = udata as stCoCServerConfig.CoCServerConfigData.Configuration;
            HttpListenerContext context = ctx as HttpListenerContext;

            if (
                (udata == null) ||
                (conf.HttpSrv == null)
                )
            {
                context.Response.Abort();
                return;
            }
            if (
                (conf.Api == null) ||
                (!conf.Api.DBCheck())
                )
            {
                conf.HttpSrv.BadRequestJson(HttpStatusCode.InternalServerError.ToString(), context, (int)HttpStatusCode.InternalServerError);
                return;
            }

            string [] urlPart = url.Split('/');
            urlPart = urlPart.Skip(1).Concat(urlPart.Take(1)).ToArray();
            Array.Resize(ref urlPart, urlPart.Length - 1);

            if ((urlPart.Length < 3) || (urlPart.Length > 7))
            {
                conf.HttpSrv.BadRequestJson(HttpStatusCode.BadRequest.ToString(), context, (int)HttpStatusCode.BadRequest);
                return;
            }
            try
            {
                stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq cReq = stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None;
                string query = string.Empty;

                query = conf.Api.GetQueryString(urlPart, ref cReq, conf.Opt.SQLDBFilterMemberTag.collection, conf.ILog.LogError);
                switch (cReq)
                {
                case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.None:
                {
                    throw new ArgumentNullException();
                }

                case stCoCAPI.CoCAPI.CoCEnum.ClanTypeReq.ServerSetup:
                {
                    msg = CoCClientSetup.GetJsonSetup(conf);
                    break;
                }

                default:
                {
                    if (string.IsNullOrWhiteSpace(query))
                    {
                        throw new ArgumentNullException();
                    }
                    try
                    {
#if DEBUG_PrintWebRequest
                        stConsole.WriteHeader("JsonWebRequest -> URL: (" + url + ") Query: (" + query + ")");
#endif
                        msg = Encoding.UTF8.GetBytes(
                            conf.Api.QueryData(query).ToJson(true, true)
                            );
#if DEBUG_PrintJson
                        stConsole.WriteHeader("JsonWebRequest -> JSON: " + Encoding.UTF8.GetString(msg));
#endif
                    }
                    catch (Exception)
                    {
                        throw new ArgumentException(HttpStatusCode.BadRequest.ToString());
                    }
                    break;
                }
                }
            }
            catch (Exception e)
            {
                conf.HttpSrv.BadRequestJson(e.Message, context, (int)HttpStatusCode.InternalServerError);
                return;
            }
            try
            {
                context.Response.AddHeader(conf.HttpSrv.httpContentType, HttpUtil.GetMimeType("", HttpUtil.MimeType.MimeJson));
                context.Response.ContentLength64 = msg.Length;
                context.Response.OutputStream.Write(msg, 0, msg.Length);
                context.Response.OutputStream.Close();
            }
#if DEBUG
            catch (Exception e)
            {
                conf.ILog.LogError(
                    string.Format(
                        Properties.Resources.fmtMainError,
                        string.Format(fmtClassName, "Json"),
                        e.GetType().Name,
                        e.Message
                        )
                    );
#else
            catch (Exception)
            {
#endif
                context.Response.Abort();
                return;
            }
            context.Response.Close();
        }