Example #1
0
        private string ProcessFormattedRequestBalance(List <HttpParameter> ptrs)
        {
            if (ptrs.Count != 1 || ptrs[0] is ChangeAccountBalanceQuery == false)
            {
                return(HttpParameter.SerializeInJSon(new List <HttpParameter>
                {
                    new ExecutionReport
                    {
                        IsOk = false,
                        Comment = "Список параметров (JSON) - ожидается один параметр типа ChangeAccountBalanceQuery"
                    }
                }));
            }
            var queryPtr = (ChangeAccountBalanceQuery)ptrs[0];

            // пополнить счет или произвести списания
            var status = accountRepository.ChangeBalance(queryPtr.AccountId,
                                                         queryPtr.Amount, queryPtr.Description, queryPtr.ValueDate,
                                                         queryPtr.ChangeType);

            return(HttpParameter.SerializeInJSon(new List <HttpParameter>
            {
                new ExecutionReport
                {
                    IsOk = status == RequestStatus.OK,
                    Comment = EnumFriendlyName <RequestStatus> .GetString(status)
                }
            }));
        }
Example #2
0
        private static void RenderSupportedQueries(StringBuilder sb)
        {
            sb.AppendLine("    <a href=\"?\">На главную</a>");
            sb.AppendLine("    <br/>");
            sb.AppendLine("    <h2>Сервер обрабатывает следующие запросы:</h2>");

            var samples = new Dictionary <HttpParameter, string>
            {
                { new RegisterAccountQuery
                  {
                      Balance         = 25000,
                      Currency        = "USD",
                      Group           = "Demo",
                      MaxLeverage     = 100.5f,
                      UserDescription = "UserTitle",
                      UserEmail       = "*****@*****.**",
                      UserLogin       = "******",
                      UserName        = "******",
                      UserPassword    = "******",
                      UserPatronym    = "User Patronym",
                      UserPhone1      = "8 800 600 50 60",
                      UserPhone2      = "8 800 600 50 61",
                      UserRightsMask  = UserAccountRights.Trade,
                      UserRoleMask    = UserRole.Trader,
                      UserSurname     = "User Surname"
                  }, "<h3>Регистрация пользователя / счета</h3> http://serverurl:port?formatquery=1&amp;register=1, HTTP POST" },
                { new ChangeAccountBalanceQuery
                  {
                      AccountId  = 3,
                      ChangeType = BalanceChangeType.Deposit,
                      Amount     = 0.15M,
                      ValueDate  = DateTime.Now
                  },
                  "<h3>Пополнение/списание со счета</h3> http://serverurl:port?formatquery=1&amp;balance=1, HTTP POST" }
            };

            foreach (var sample in samples)
            {
                sb.AppendLine("    " + sample.Value);
                sb.AppendLine("    <br/> <b>Содержание запроса - JSON-массив вида</b> </br>");
                sb.AppendLine("    <p style=\"width:90%\">");
                sb.Append(HttpUtility.HtmlEncode(HttpParameter.SerializeInJSon(
                                                     new List <HttpParameter> {
                    sample.Key
                })));
                sb.AppendLine("</p>");
                // допустимые значения перечислений
                foreach (var pi in sample.Key.GetType().GetProperties())
                {
                    if (pi.PropertyType.IsEnum)
                    {
                        sb.AppendLine("    <span>" + MakeEnabledPropertyValuesString(pi) + "</span> <br/>");
                    }
                }
            }
        }
Example #3
0
        private string GetServiceStateJSon()
        {
            var srvStatus = ServiceProcessManager.GetProcessesStates();

            if (srvStatus.Count == 0)
            {
                return(string.Empty);
            }
            return(HttpParameter.SerializeInJSon(srvStatus.Cast <HttpParameter>().ToList()));
        }
Example #4
0
        //private static string FormatPropertyValue(PropertyInfo pi, object sample)
        //{
        //    var val = pi.GetValue(sample, null);
        //    if (val == null) return "null";
        //    if (pi.PropertyType == typeof (DateTime) ||
        //        Nullable.GetUnderlyingType(pi.PropertyType) == typeof (DateTime))
        //        return "'\\/Date(" + (long)((DateTime)val - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds + "+"
        //        + TimeZoneInfo.Local.BaseUtcOffset.Hours.ToString("D2")
        //        + TimeZoneInfo.Local.BaseUtcOffset.Minutes.ToString("D2") + ")\\/'".Replace("+-", "-");

        //    var omitQuotes = IsNumericType(pi.PropertyType);

        //    return omitQuotes
        //        ? Converter.GetStringFromObject(val)
        //        : "'" + Converter.GetStringFromObject(val) + "'";
        //}

        //private static readonly HashSet<Type> numericTypes = new HashSet<Type>
        //{
        //    typeof(byte), typeof(short), typeof(ushort), typeof(int), typeof(uint), typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal)
        //};

        //internal static bool IsNumericType(Type type)
        //{
        //    return numericTypes.Contains(type) ||
        //           numericTypes.Contains(Nullable.GetUnderlyingType(type));
        //}


        /// <summary>
        /// вернуть true если дальнейшая обработка запроса не требуется
        /// </summary>
        private static bool ProcessQueryString(NameValueCollection query, out string resp)
        {
            resp = string.Empty;

            if (query.AllKeys.Contains("reset"))
            {
                ResetServiceState();
                return(false);
            }

            // вернуть сессии пользователей
            if (query.AllKeys.Contains("current_session"))
            {
                var sessions  = UserSessionStorage.Instance.GetSessions();
                var userInfos = sessions.Select(s => new TerminalUser
                {
                    IP      = s.ip,
                    Login   = s.login,
                    Account = s.accountId
                }).Cast <HttpParameter>().ToList();

                resp = HttpParameter.SerializeInJSon(userInfos);
                return(true);
            }

            if (query.AllKeys.Contains("sendMessage") &&
                query.AllKeys.Contains("terminal"))
            {
                var msg      = query["sendMessage"];
                var terminal = query["terminal"].ToLongSafe() ?? 0;

                Logger.InfoFormat("Command send message (\"{0}\" to {1})",
                                  msg, terminal);
                SendMessageToTerminal(msg, terminal);
                return(true);
            }

            if (query.AllKeys.Contains("logoutUser"))
            {
                var terminal = query["logoutUser"].ToLongSafe() ?? 0;

                Logger.InfoFormat("Logout user {0}",
                                  terminal);
                UserSessionStorage.Instance.ExcludeStaleSessions(new List <long> {
                    terminal
                });
                return(true);
            }

            return(false);
        }
Example #5
0
        public void Serialization()
        {
            var time    = DateTime.Now;
            var objects = new List <HttpParameter>
            {
                new TradeSharpServiceProcess
                {
                    FileName = "TradeSharp.SiteBridge",
                    Name     = "SiteBridge",
                    Title    = "Мост Web-сервиса"
                },
                new TradeSharpServiceProcess
                {
                    FileName = "TradeSharp.Quote",
                    Name     = "Quote",
                    Title    = "Котировки"
                },
                new TradeSharpServiceStartStop
                {
                    ShouldStart = true,
                    SrvName     = "TradeSharp.SiteBridge"
                },
                new ExecutionReport
                {
                    Comment = "not OK",
                    IsOk    = false
                },
                new TerminalUser
                {
                    Account = 100,
                    IP      = "198.15.12.45",
                    Login   = "******"
                },
                new ChangeAccountBalanceQuery
                {
                    AccountId  = 3,
                    ChangeType = BalanceChangeType.Deposit,
                    Amount     = 0.15M,
                    ValueDate  = time
                }
            };
            var str  = HttpParameter.SerializeInJSon(objects);
            var objs = HttpParameter.DeserializeFromJSon(str);

            Assert.IsNotNull(objs);
            Assert.AreEqual(objs.Count, objects.Count);
            Assert.IsFalse(objects.Select(o => o.ToString()).Except(objs.Select(o => o.ToString())).Any());
        }
Example #6
0
        private static string ProcessFormattedRequestRegister(List <HttpParameter> ptrs)
        {
            if (ptrs.Count != 1 || ptrs[0] is RegisterAccountQuery == false)
            {
                return(HttpParameter.SerializeInJSon(new List <HttpParameter>
                {
                    new ExecutionReport
                    {
                        IsOk = false,
                        Comment = "Список параметров (JSON) - ожидается один параметр типа RegisterAccountQuery"
                    }
                }));
            }
            var queryPtr = (RegisterAccountQuery)ptrs[0];
            var status   = ManagerAccount.Instance.RegisterAccount(
                new PlatformUser
            {
                Login            = queryPtr.UserLogin,
                Password         = queryPtr.UserPassword,
                Name             = queryPtr.UserName,
                Surname          = queryPtr.UserSurname,
                Patronym         = queryPtr.UserPatronym,
                Description      = queryPtr.UserDescription,
                Title            = queryPtr.UserLogin,
                Email            = queryPtr.UserEmail,
                Phone1           = queryPtr.UserPhone1,
                Phone2           = queryPtr.UserPhone2,
                RegistrationDate = DateTime.Now,
                RightsMask       = queryPtr.UserRightsMask,
                RoleMask         = queryPtr.UserRoleMask
            },
                queryPtr.Currency,
                (int)queryPtr.Balance,
                (decimal)queryPtr.MaxLeverage,
                queryPtr.UserPassword, // пароль задан заранее, автоматом не сочиняем
                false);                // не подписывать автоматом на торговые сигналы лучших в мире трейдеров

            return(HttpParameter.SerializeInJSon(new List <HttpParameter>
            {
                new ExecutionReport
                {
                    IsOk = status == AccountRegistrationStatus.OK,
                    Comment = EnumFriendlyName <AccountRegistrationStatus> .GetString(status)
                }
            }));
        }
Example #7
0
        /// <summary>
        /// параметры запроса переданы в формате JSON
        ///
        /// возвращает ответ, сериализованный в JSON
        /// если параметры запроса не прочитаны - вернуть состояние всех сервисов
        /// иначе - выполнить действие
        /// </summary>
        private string ProcessFormattedHttpRequest(HttpListenerContext context)
        {
            using (var reader = new StreamReader(context.Request.InputStream,
                                                 context.Request.ContentEncoding))
            {
                var text = reader.ReadToEnd();
                if (string.IsNullOrEmpty(text))
                {
                    return(GetServiceStateJSon());
                }
                var ptrs = HttpParameter.DeserializeFromJSon(text);
                if (ptrs.Count == 0)
                {
                    return(GetServiceStateJSon());
                }

                // остановить / запустить сервис
                if (ptrs[0] is TradeSharpServiceStartStop)
                {
                    var cmd    = (TradeSharpServiceStartStop)ptrs[0];
                    var report = new ExecutionReport();
                    if (cmd.ShouldStart)
                    {
                        var status = ServiceProcessManager.StartProcess(cmd.SrvName);
                        report.IsOk    = status == ServiceProcessManager.StartProcessStatus.OK;
                        report.Comment = status.ToString();
                    }
                    else
                    {
                        var status = ServiceProcessManager.KillProcess(cmd.SrvName);
                        report.IsOk    = status == ServiceProcessManager.KillProcessStatus.OK;
                        report.Comment = status.ToString();
                    }
                    return(HttpParameter.SerializeInJSon(new List <HttpParameter> {
                        report
                    }));
                }
            }

            return(GetServiceStateJSon());
        }
Example #8
0
        private string ProcessFormattedHttpRequest(HttpListenerContext context)
        {
            using (var reader = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding))
            {
                var text = reader.ReadToEnd();
                if (string.IsNullOrEmpty(text))
                {
                    return(HttpParameter.SerializeInJSon(new List <HttpParameter> {
                        new ExecutionReport {
                            IsOk = false, Comment = "Список параметров (JSON) пуст"
                        }
                    }));
                }
                var ptrs = HttpParameter.DeserializeFromJSon(text);
                if (ptrs.Count == 0)
                {
                    return(HttpParameter.SerializeInJSon(new List <HttpParameter> {
                        new ExecutionReport {
                            IsOk = false, Comment = "Список параметров (JSON) - ошибка десериализации"
                        }
                    }));
                }

                if (context.Request.QueryString.AllKeys.Contains("register"))
                {
                    return(ProcessFormattedRequestRegister(ptrs));
                }
                if (context.Request.QueryString.AllKeys.Contains("balance"))
                {
                    return(ProcessFormattedRequestBalance(ptrs));
                }
            }

            return(HttpParameter.SerializeInJSon(new List <HttpParameter>
            {
                new ExecutionReport {
                    IsOk = false, Comment = "Запрос не поддерживается"
                }
            }));
        }