示例#1
0
        public async Task Create([Remainder] string name)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var users = await Context.Channel.GetUsersAsync().FlattenAsync();

            var addedUser = users.FirstOrDefault(_ => _.Username.ToLower().Contains(name.ToLower()));

            if (addedUser != null)
            {
                var room   = RouteRoom();
                var client = room.Clients.ToList().FirstOrDefault(_ => _.Name.ToLower().Contains(addedUser.Username.ToLower()));

                var builder = new EmbedBuilder();
                builder.WithTitle($"{Context.Channel.Name}");
                builder.WithDescription($"добавлен пользователь {addedUser.Username}");

                if (client == null)
                {
                    client = new FinanceClient(addedUser.Id, addedUser.Username);
                    room.AddClient(client);

                    await Context.User.SendMessageAsync("", false, builder.Build());
                }
                else
                {
                    builder.WithDescription($"{addedUser.Username} уже существует");
                    await Context.User.SendMessageAsync("", false, builder.Build());
                }
            }
        }
示例#2
0
        public Client()
        {
            InitializeComponent();

            Архив        = new DataClient();
            Конфигуратор = new ConfigurationClient();
            Бухгалтерия  = new FinanceClient();
            Сервисы      = new ServicesClient();
            Файлы        = new FileClient();
        }
示例#3
0
        public Client(TimeSpan timeout)
        {
            InitializeComponent();

            //для создания timeout создаем новые ссылки
            this.Архив        = new DataClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Data")));
            this.Бухгалтерия  = new FinanceClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Finance")));
            this.Конфигуратор = new ConfigurationClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Configuration")));
            this.Сервисы      = new ServicesClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Services")));
            this.Файлы        = new FileClient(DefaultStreamingBinding, new EndpointAddress(string.Format(RosService.Client.DefaultStreamingEndpointAddress, "File")));

            CommunicationObjects = new ICommunicationObject[] { Архив, Конфигуратор, Бухгалтерия, Сервисы, Файлы };
            SetTimeout(timeout);
        }
示例#4
0
        public Client()
        {
            InitializeComponent();

            var current = null as ClientHost;

            do
            {
                if (currentService >= maxService)
                {
                    currentService = 0;
                }

                current = _ClientHosts.ElementAtOrDefault(currentService);
                Interlocked.Increment(ref currentService);
            } while (current == null);

            lock (current.lockObj)
            {
                #region NamePipe, Tcp сбрасывать соединение
                switch (Mode)
                {
                case ClientMode.Server:
                case ClientMode.Tcp:
                case ClientMode.NamedPipe:
                {
                    var _time = DateTime.Now;
                    if (current.IdleTimeout <= _time)
                    {
                        current.Dispose();
                        current.IdleTimeout = _time.Add(InactivityTimeout);
                    }
                }
                break;
                }
                #endregion

                if (!current.IsInitialize)
                {
                    current.Dispose();
                    current.Initialize();
                }

                this.Архив        = current.Архив;
                this.Конфигуратор = current.Конфигуратор;
                this.Бухгалтерия  = current.Бухгалтерия;
                this.Сервисы      = current.Сервисы;
                this.Файлы        = current.Файлы;
            }
        }
示例#5
0
        private FinanceClient FindClient()
        {
            var room = RouteRoom();

            var client = room.Clients.FirstOrDefault(_ => _.Id == Context.User.Id);

            if (client == null)
            {
                client = new FinanceClient(Context.User.Id, Context.User.Username);
                room.AddClient(client);
            }
            else if (client.Name != Context.User.Username)
            {
                client.SetName(Context.User.Username);
            }

            return(client);
        }
示例#6
0
            public void Initialize()
            {
                if (IsFaulted(Архив))
                {
                    //var s = System.Diagnostics.Stopwatch.StartNew();
                    //if(DataF == null)
                    //    DataF = new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Data"));

                    Архив = new DataClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Data")));
                    Архив.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
                    Архив.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);
                    //Архив.Open();
                }

                if (IsFaulted(Конфигуратор))
                {
                    Конфигуратор = new ConfigurationClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Configuration")));
                    Конфигуратор.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
                    Конфигуратор.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);

                    // Find the ContractDescription of the operation to find.
                    //ContractDescription cd = ((ConfigurationClient)Конфигуратор).Endpoint.op
                    //OperationDescription myOperationDescription = cd.Operations.Find("Add");

                    //// Find the serializer behavior.
                    //DataContractSerializerOperationBehavior serializerBehavior =
                    //    myOperationDescription.Behaviors.
                    //       Find<DataContractSerializerOperationBehavior>();

                    // If the serializer is not found, create one and add it.
                    //if (serializerBehavior == null)
                    //{
                    //    serializerBehavior = new DataContractSerializerOperationBehavior(myOperationDescription);
                    //    myOperationDescription.Behaviors.Add(serializerBehavior);
                    //}
                    //var serializerBehavior = new DataContractSerializerOperationBehavior(new OperationDescription("f1", new ContractDescription("f1"));
                    //serializerBehavior.MaxItemsInObjectGraph = int.MaxValue;
                    //Конфигуратор.Endpoint.Behaviors.Add(
                    //var f = Конфигуратор.Endpoint.Behaviors.Find<DataContractSerializerOperationBehavior>();
                    //serializerBehavior.IgnoreExtensionDataObject = true;
                }

                if (IsFaulted(Бухгалтерия))
                {
                    Бухгалтерия = new FinanceClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Finance")));
                    Бухгалтерия.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
                    Бухгалтерия.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);
                }

                if (IsFaulted(Сервисы))
                {
                    Сервисы = new ServicesClient(DefaultBinding, new EndpointAddress(string.Format(RosService.Client.DefaultEndpointAddress, "Services")));
                    Сервисы.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
                    Сервисы.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);
                }

                if (IsFaulted(Файлы))
                {
                    Файлы = new FileClient(DefaultStreamingBinding, new EndpointAddress(string.Format(RosService.Client.DefaultStreamingEndpointAddress, "File")));
                    Файлы.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
                    Файлы.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);
                }
                Items        = new ICommunicationObject[] { Архив, Конфигуратор, Бухгалтерия, Сервисы, Файлы };
                IsInitialize = true;
            }
示例#7
0
        public DataSet BuildDataSet(string НазваниеОтчета, IEnumerable <Query> Запросы, RosService.Data.Хранилище Хранилище, string user, string domain)
        {
            var ds = new DataSet();
            //добавить параметры запроса
            var param = Запросы.Where(p => p != null).SelectMany(p => p.Параметры).Distinct(new ПараметрComparer());
            var table = new System.Data.DataTable("Параметры");

            table.Columns.Add("Имя", typeof(string));
            table.Columns.Add("Значение", typeof(object));

            if (param.FirstOrDefault(p => p.Имя.Equals("@Пользователь")) == null)
            {
                table.Rows.Add(new object[] { "@Пользователь", user });
            }
            if (param.FirstOrDefault(p => p.Имя.Equals("@Дата")) == null)
            {
                table.Rows.Add(new object[] { "@Дата", DateTime.Now });
            }
            if (param.FirstOrDefault(p => p.Имя.Equals("@НазваниеОтчета")) == null)
            {
                table.Rows.Add(new object[] { "@НазваниеОтчета", НазваниеОтчета });
            }
            if (Запросы != null)
            {
                foreach (var item in param)
                {
                    table.Rows.Add(new object[] { item.Имя, item.Значение });
                }
            }
            ds.Merge(table);

            //загрузить константы
            try
            {
                var query = new Query();
                //query.CacheDuration = TimeSpan.FromMinutes(5);
                //query.CacheLocation = Query.OutputCacheLocation.Memory;
                //query.CacheName = "ПечатьОтчетов/Константы";
                query.Типы.Add("Константа");
                query.ДобавитьВыводимыеКолонки(new string[] { "НазваниеОбъекта", "ЗначениеКонстанты" });
                query.МестаПоиска.Add(new Query.МестоПоиска()
                {
                    id_node = "Константы", МаксимальнаяГлубина = 1
                });
                table           = data.Поиск(query, Хранилище.Оперативное, domain).Значение;
                table.TableName = "Константа";
                ds.Merge(table);
            }
            catch (Exception ex)
            {
                new ConfigurationClient().ЖурналСобытийДобавитьОшибку("СформироватьОтчет.BuildDataSet: Константа", ex.ToString(), user, domain);
            }

            if (Запросы != null)
            {
                var lockObject = new System.Object();
                var oRow       = 0;
                foreach (var _query in Запросы.Where(p => p != null))
                {
                    var table1 = null as System.Data.DataTable;
                    if (_query.СтрокаЗапрос != null && _query.СтрокаЗапрос.StartsWith("[ПоискИстории;"))
                    {
                        table1 = data.ПоискИстории(_query, Хранилище, domain).Значение;
                    }
                    else
                    {
                        table1 = data.Поиск(_query, Хранилище, domain).Значение;
                    }
                    table1.TableName = string.Format("Значение{0}", oRow + 1);
                    var colums = new List <string>();
                    foreach (DataColumn _item in table1.Columns)
                    {
                        if (!(_item.DataType == typeof(double) || _item.DataType == typeof(decimal)))
                        {
                            continue;
                        }
                        if (_item.ColumnName == "id_node" || _item.ColumnName == "type")
                        {
                            continue;
                        }
                        colums.Add(_item.ColumnName);
                    }
                    foreach (var _item in colums)
                    {
                        var column  = table1.Columns.Add(_item + "Прописью", typeof(string));
                        var column2 = table1.Columns.Add(_item + "ПрописьюПолностью", typeof(string));
                        foreach (var row in table1.AsEnumerable())
                        {
                            var p = Convert.IsDBNull(row[_item]) ? 0 : Convert.ToDouble(row[_item]);
                            row[column]  = new FinanceClient().ЧислоПрописью(p, ФорматЧислаПрописью.ублиБезКопеек).Trim();
                            row[column2] = new FinanceClient().ЧислоПрописью(p, ФорматЧислаПрописью.убли).Trim();
                        }
                    }
                    lock (lockObject)
                    {
                        ds.Merge(table1);
                    }
                    oRow++;
                }//);
            }
            return(ds);
        }