コード例 #1
0
ファイル: DebuggerEngine.cs プロジェクト: atikbif/Relkon6
        /// <summary>
        /// Обработка запросов на запись
        /// </summary>
        private void ProceedWriteItems(AbstractChannel channel)
        {
            for (int i = 0; i < this.writeItems.Count; i++)
            {
                RequestItem item = this.writeItems[i];
                // Определяем, сколько можно записать за один запрос
                int packetSize = channel.GetPacketSize(item.MemoryType);


                // Разбиваем буфер по запросам и записываем их в контроллер
                for (int j = 0; j < item.Data.Length; j += packetSize)
                {
                    int    c      = Math.Min(packetSize, item.Data.Length - j);
                    byte[] buffer = new byte[c];
                    Array.Copy(item.Data, j, buffer, 0, c);
                    try
                    {
                        channel.WriteToMemory(item.MemoryType, item.Address + j, buffer);
                        this.WritedRequestsCount++;
                    }
                    catch
                    {
                        this.ErrorWritedRequestsCount++;
                        item.Error = true;
                    }
                    // В случае необходимости, информируем о процессе записи
                    if (item.ProgressChangedCallback != null)
                    {
                        // Устанавливаем параметры для выполнения события
                        object[] Params = new object[4];
                        Params[0] = item.ProgressChangedCallback;
                        Params[1] = item.Sender;
                        Params[2] = (double)(j + c) / (item.Data.Length);
                        Params[3] = null;
                        // Выплняем Callback в главном потоке
                        this.asyncOp.Post(this.exProgressChangedDelegate, Params);
                    }
                }
                if (item.ProceedingCompletedCallback != null)
                {
                    // Нужно проинформировать элемент о завершении получения данных
                    // Устанавливаем параметры для выполнения события
                    object[] Params = new object[4];
                    Params[0] = item.ProceedingCompletedCallback;
                    Params[1] = item.Sender;
                    Params[2] = null;
                    Params[3] = item.Error;
                    // Выполняем Callback в главном потоке
                    this.asyncOp.Post(this.exProceedingCompleetedDelegate, Params);
                }
                this.writeItems.Remove(item);
                i--;
            }
        }
コード例 #2
0
ファイル: Session.cs プロジェクト: allexc123/EnjoyFull
    public void Connect(string host, int port)
    {
        this.channel = new TChannel(host, port);
        this.channel.Start();

        channel.ReadCallback       += OnRead;
        this.channel.ErrorCallback += OnError;

        //this.scheduled.Start();
        //this.scheduled.ScheduleAtFixedRate(CheckConnect, 1000, 1000);
    }
コード例 #3
0
            void INativeUnsafe.FinishWrite(WriteRequest writeRequest)
            {
                AbstractChannel ch = this.channel;

                if (ch.EventLoop.InEventLoop)
                {
                    this.FinishWrite(writeRequest);
                }
                else
                {
                    ch.EventLoop.Execute(WriteCallbackAction, this, writeRequest);
                }
            }
コード例 #4
0
            void IServerNativeUnsafe.Accept(RemoteConnection connection)
            {
                AbstractChannel ch = this.channel;

                if (ch.EventLoop.InEventLoop)
                {
                    this.Accept(connection);
                }
                else
                {
                    ch.EventLoop.Execute(AcceptCallbackAction, this, connection);
                }
            }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: atikbif/Relkon6
        void _searcher_DoWork(object sender, DoWorkEventArgs e)
        {
            _currentPort = new SerialportChannel((string)e.Argument, 19200, ProtocolType.RC51BIN);

            string pattern     = "relkon";
            string bootPattern = "boot";

            byte[] request          = new byte[] { 0x00, 0xA0 };
            bool   searchingStopped = false;

            int[]          baudRates = new int[] { 19200, 115200, 57600, 38400, 9600, 4800 };
            ProtocolType[] protocols = new ProtocolType[] { ProtocolType.RC51BIN, ProtocolType.RC51ASCII };

            int totalProgress = baudRates.Length * protocols.Length;

            for (int i = 0; i < protocols.Length && !searchingStopped; i++)
            {
                _currentPort.RelkonProtocolType = protocols[i];
                for (int j = 0; j < baudRates.Length && !searchingStopped; j++)
                {
                    ((SerialportChannel)_currentPort).BaudRate = baudRates[j];

                    if (_searcher.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    try
                    {
                        _currentPort.Open();
                        byte[] res = _currentPort.SendRequest(request, pattern.Length);
                        ((SerialportChannel)_currentPort).DiscardInBuffer();
                        if (res != null && Encoding.ASCII.GetString(res).ToLower().Contains(pattern.ToLower()) ||
                            Encoding.ASCII.GetString(res).ToLower().Contains(bootPattern.ToLower()))
                        {
                            return;
                        }
                    }
                    catch { }
                    finally
                    {
                        _currentPort.Close();
                    }
                    _searcher.ReportProgress((int)((100 / totalProgress) * (i * j + j)), "Поиск параметров контроллера...");
                }
            }

            _currentPort = null;
        }
コード例 #6
0
 /// <summary>
 /// Запускает процесс загрузки данных
 /// </summary>
 public void StartUploading()
 {
     lock (this.userStateToLifeTime)
     {
         if (this.userStateToLifeTime.Count != 0)
         {
             throw new Exception("Процесс загрузки уже запущен");
         }
     }
     this.devicePort = null;
     this.canceled   = false;
     //this.UpdateSeacherParams();
     this.deviceSearcher_ProgressChanged(this, new ProgressChangedEventArgs(0, null)); // чтобы при создании Message ProgressForm было непустым
     this.deviceSearcher.StartSearch();
 }
コード例 #7
0
ファイル: NioEventLoop.cs プロジェクト: sabal90/Netty-CSharp
        protected override void run()
        {
            while (true)
            {
                if (isTask == true)
                {
                    runAllTasks();
                    Thread.Sleep(1);
                }
                else
                {
                    WindowsSelectorImpl windowsSelector = (WindowsSelectorImpl)_unwrappedSelector;
                    SelectionKeyImpl[]  selectionKeys   = windowsSelector.getChannels();

                    foreach (SelectionKeyImpl selectionKey in selectionKeys)
                    {
                        if (selectionKey == null)
                        {
                            continue;
                        }

                        Object a = selectionKey.attachment();

                        if (!(a is AbstractChannel))
                        {
                            continue;
                        }

                        AbstractChannel ch = (AbstractChannel)a;
                        ch.getUnsafe().close();
                        runAllTasks();
                    }

                    break;
                }
            }
        }
コード例 #8
0
ファイル: DebuggerEngine.cs プロジェクト: atikbif/Relkon6
        /// <summary>
        /// Запуск отладчика
        /// </summary>
        public void Start()
        {
            if (this.EngineStatus != DebuggerEngineStatus.Stopped)
            {
                throw new Exception("Отладчик уже запущен");
            }

            AbstractChannel port = null;

            if (this.Parameters.ComConection)
            {
                port = new SerialportChannel(this.Parameters.PortName, this.Parameters.BaudRate, this.Parameters.ProtocolType);
            }
            else
            {
                port = new EthernetChannel(this.Parameters.PortIP, 12144, this.Parameters.ProtocolType);
            }

            port.ControllerAddress = this.Parameters.ControllerNumber;
            this.asyncOp           = AsyncOperationManager.CreateOperation(port);
            WorkingDelegateCOM worker = new WorkingDelegateCOM(this.ProceedRequests);

            worker.BeginInvoke(port, null, null);
        }
コード例 #9
0
        private void deviceSearcher_DeviceSearchCompleted(object sender, DeviceSearchCompletedEventArgs e)
        {
            if (e.Cancelled || e.Error != null)
            {
                this.RaiseUploadingCompletedEvent(new AsyncCompletedEventArgs(e.Error, e.Cancelled, null));
            }
            else
            {
                if (Encoding.ASCII.GetString(e.DeviceResponse).ToLower().Contains(this.deviceSearcher.Pattern.ToLower()))
                {
                    bootLoaderMode = false;
                }

                AbstractChannel port = new SerialportChannel(e.Port);
                port.ControllerAddress = e.DeviceResponse[0];

                this.devicePort = this.solution.LastWorkedPort = port;

                AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(Guid.NewGuid());
                this.userStateToLifeTime.Add(asyncOp);
                WorkerEventHandler workerDelegate = new WorkerEventHandler(this.Upload);
                workerDelegate.BeginInvoke(port, null, null);
            }
        }
コード例 #10
0
        private void Upload(AbstractChannel port)
        {
            Exception error = null;

            port = (SerialportChannel)port;
            try
            {
                int          oldBaudRate = ((SerialportChannel)port).BaudRate;
                ProtocolType oldProtocol = port.RelkonProtocolType;
                long         programSize = 0;

                port.Open();

                byte[] req;

                req = port.SendRequest(new byte[] { 0x00, 0xA2 }, 16);
                if (req != null)
                {
                    string s = Encoding.ASCII.GetString(req);
                    if (s.Substring(9, 4) != "PROG")
                    {
                        throw new Exception("Данный порт не предназначен для программирования!");
                    }
                }


                req = port.SendRequest(this.deviceSearcher.Request, this.deviceSearcher.Pattern.Length);
                if (req != null)
                {
                    string s = Encoding.ASCII.GetString(req);
                    bootLoaderMode = s.ToLower().Contains(this.deviceSearcher.Pattern.ToLower()) ? false : true;
                }

                if (uploadOnlyProgram)
                {
                    if (!bootLoaderMode)
                    {
                        if (this.canceled)
                        {
                            throw new StopUploadinException();
                        }
                        port.Open();
                        this.ChangeProgressMethod("Сброс контроллера...", 0);
                        //Перетераем первый символ слова для загрузчика
                        port.WriteByteToMemory(MemoryType.FRAM, 0x7FF5, 0x00);
                        port.ResetController();
                        port.Close();
                        this.ChangeProgressMethod("Сброс контроллера...", 100);
                        if (this.canceled)
                        {
                            throw new StopUploadinException();
                        }
                        Thread.Sleep(1000);
                    }

                    ((SerialportChannel)port).BaudRate = 115200;
                    port.RelkonProtocolType            = ProtocolType.RC51BIN;
                    port.Open();

                    ((SerialportChannel)port).DirectPort.Write("1");
                    waitfor(((SerialportChannel)port).DirectPort, 'C');

                    Stream       fs    = new FileStream(solution.DirectoryName + "\\" + solution.Name + ".bin", FileMode.Open);
                    BinaryReader br    = new BinaryReader(fs);
                    MemoryStream ms    = new MemoryStream();
                    BinaryWriter bw    = new BinaryWriter(ms);
                    byte[]       bytes = new byte[br.BaseStream.Length];
                    while (br.BaseStream.Position != br.BaseStream.Length)
                    {
                        bw.Write(br.ReadBytes(1024));
                        bw.Flush();
                    }
                    fs.Close();
                    br.Close();
                    bytes       = ms.ToArray();
                    programSize = bytes.Length;
                    ms.Close();
                    bw.Flush();
                    bw.Close();

                    //waitforack(port.DirectPort);
                    //waitfor(port.DirectPort, 'C');
                    ushort packetnum = 0;

                    YModemPacket initpacket = new YModemPacket();
                    initpacket.isinit     = true;
                    initpacket.packetnum  = packetnum;
                    initpacket.filename   = solution.Name + ".bin";
                    initpacket.filelength = bytes.Length;

                    if ((solution.Name + ".bin").Length > 125)
                    {
                        initpacket.longpacket = true;
                    }
                    else
                    {
                        initpacket.longpacket = false;
                    }

                    initpacket.createPacket();

                    ((SerialportChannel)port).DiscardInBuffer();
                    SendPacket(((SerialportChannel)port).DirectPort, initpacket);
                    waitfor(((SerialportChannel)port).DirectPort, 'C');
                    //port.DiscardInBuffer();

                    MemoryStream ms2     = new MemoryStream(bytes);
                    byte[]       temparr = new byte[1024];
                    YModemPacket sendPacket;
                    long         numpack = Math.Abs(((long)ms2.Length) / ((long)1024));

                    BinaryReader br2 = new BinaryReader(ms2);

                    this.ChangeProgressMethod("Загрузка программы в контроллер...", 0);
                    while (ms2.Position != ms2.Length)
                    {
                        if (this.canceled)
                        {
                            throw new StopUploadinException();
                        }

                        int pers = (int)((float)100 / (float)ms2.Length * ms2.Position);
                        this.ChangeProgressMethod("Загрузка программы в контроллер...", pers);
                        Application.DoEvents();
                        //_waitforack = false;
                        packetnum++;
                        temparr               = br2.ReadBytes(1024);
                        sendPacket            = new YModemPacket();
                        sendPacket.packetnum  = packetnum;
                        sendPacket.longpacket = true;
                        sendPacket.isinit     = false;
                        sendPacket.data       = temparr;
                        sendPacket.createPacket();

                        SendPacket(((SerialportChannel)port).DirectPort, sendPacket);
                    }


                    ((SerialportChannel)port).DirectPort.Write(new byte[] { (byte)0x04 }, 0, 1);
                    YModemPacket endpacket = new YModemPacket();
                    endpacket.isend      = true;
                    endpacket.longpacket = false;
                    endpacket.packetnum  = 0;
                    endpacket.data       = new byte[128];
                    endpacket.createPacket();

                    SendPacket(((SerialportChannel)port).DirectPort, endpacket);

                    Thread.Sleep(2000);
                    ((SerialportChannel)port).DiscardInBuffer();
                }



                if (!bootLoaderMode)
                {
                    ((SerialportChannel)port).BaudRate = oldBaudRate;
                    port.RelkonProtocolType            = oldProtocol;
                }
                else
                {
                    this.ChangeProgressMethod("Поиск параметров контроллера...", 0);

                    string         pattern          = "relkon 6.0";
                    byte[]         request          = new byte[] { 0x00, 0xA0 };
                    bool           searchingStopped = false;
                    int[]          baudRates        = new int[] { 115200, 19200, 57600, 38400, 9600, 4800 };
                    ProtocolType[] protocols        = new ProtocolType[] { ProtocolType.RC51BIN, ProtocolType.RC51ASCII };
                    int            totalProgress    = baudRates.Length * protocols.Length;
                    for (int i = 0; i < protocols.Length && !searchingStopped; i++)
                    {
                        port.RelkonProtocolType = protocols[i];
                        for (int j = 0; j < baudRates.Length && !searchingStopped; j++)
                        {
                            ((SerialportChannel)port).BaudRate = baudRates[j];
                            try
                            {
                                if (this.canceled)
                                {
                                    throw new StopUploadinException();
                                }

                                port.Open();
                                byte[] res = port.SendRequest(request, pattern.Length);
                                ((SerialportChannel)port).DiscardInBuffer();
                                if (res != null && Encoding.ASCII.GetString(res).ToLower().Contains(pattern))
                                {
                                    searchingStopped = true;
                                    break;
                                }
                            }
                            catch { }
                            finally
                            {
                                port.Close();
                            }

                            this.ChangeProgressMethod("Поиск параметров контроллера...", (int)((100 / totalProgress) * (i * j + j)));
                        }
                    }
                }

                if (uploadOnlyParams)
                {
                    port.Open();

                    this.ChangeProgressMethod("Загрузка настроек...", 1);

                    if (uploadOnlyParams)
                    {
                        byte[] b = port.ReadFRAM(0x7F06, 4);
                        programSize = (long)BitConverter.ToUInt32(b, 0);
                    }

                    byte[] ParamsBuffer = this.CreateParamsBuffer((uint)programSize);

                    this.ChangeProgressMethod("Загрузка настроек...", 50);
                    port.WriteToMemory(MemoryType.FRAM, 0x7F00, ParamsBuffer);
                    this.ChangeProgressMethod("Загрузка настроек...", 100);
                    this.ChangeProgressMethod("Загрузка заводских уставок...", 0);

                    int adr = 0x7B00;
                    for (int i = 0; i < 8; i++)
                    {
                        byte[] buf = new byte[128];
                        for (int j = 0; j < 128; j++)
                        {
                            if (this.canceled)
                            {
                                throw new StopUploadinException();
                            }

                            buf[j] = (byte)this.solution.Vars.GetEmbeddedVar("EE" + (i * 128 + j).ToString()).Value;
                        }
                        port.WriteToMemory(MemoryType.FRAM, adr, buf);
                        adr += 128;
                        this.ChangeProgressMethod("Загрузка заводских уставок...", (int)(i * ((double)100 / (double)8)));
                    }

                    //this.ChangeProgressMethod("Загрузка настроек...", 75);
                    //port.WriteToMemory(MemoryType.FRAM, 0x7B00, EmbeddedVarsBuffer);

                    this.ChangeProgressMethod("Загрузка настроек...", 100);
                    this.ChangeProgressMethod("Сброс контроллера...", -1);
                }

                if (_readEmbVars && !bootLoaderMode)
                {
                    this.ChangeProgressMethod("Чтение заводских уставок...", 0);
                    int adr = 0x7B00;

                    for (int i = 0; i < 8; i++)
                    {
                        byte[] buf = port.ReadFromMemory(MemoryType.FRAM, adr, 128);

                        for (int j = 0; j < 128; j++)
                        {
                            this.solution.Vars.GetEmbeddedVar("EE" + (i * 128 + j).ToString()).Value = buf[j];
                        }

                        adr += 128;

                        this.ChangeProgressMethod("Чтение заводских уставок...", (int)(i * ((double)100 / (double)8)));
                    }
                }

                try
                {
                    port.ResetController();
                }
                catch
                {
                    Utils.WarningMessage("Системе не удалось перезагрузить контроллер. Чтобы настройки вступили в силу, пересбросьте питание вручную.");
                }
            }
            catch (Exception ex)
            {
                if (!(ex is StopUploadinException))
                {
                    error = ex;
                }
                //throw ex;
            }
            finally
            {
                port.Close();
            }

            lock (this.userStateToLifeTime)
            {
                this.CompletionMethod(error, this.canceled);
                this.userStateToLifeTime.Clear();
            }
        }
コード例 #11
0
 public AsyncServerSocketChannelUnsafe(AbstractChannel channel) : base(channel)
 {
 }
コード例 #12
0
 protected AbstractNioUnsafe(AbstractChannel channel) : base(channel)
 {
 }
コード例 #13
0
ファイル: RxtxChannel.cs プロジェクト: sabal90/Netty-CSharp
 public SerialCommChannelUnsafe(AbstractChannel channel) : base(channel)
 {
 }
コード例 #14
0
 public AsyncTcpChannelUnsafe(AbstractChannel channel) : base(channel)
 {
 }
コード例 #15
0
 public WebSocketChannelUnsafe(AbstractChannel channel)
     : base(channel)
 {
 }
コード例 #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CallSubscripter"/> class.
 /// </summary>
 /// <param name="chnl">The CHNL.</param>
 public CallSubscripter(AbstractChannel chnl)
 {
     name    = "Call Subscripter";
     channel = chnl;
 }
コード例 #17
0
ファイル: DebuggerEngine.cs プロジェクト: atikbif/Relkon6
        /// <summary>
        /// Основной метод движка; выполняет обработку запросов пользователя
        /// </summary>
        /// <param name="port">Порт, через который происходит отсылка запросов</param>
        private void ProceedRequests(AbstractChannel channel)
        {
            Exception error = null; // используется в событии DebuggerEngineStatusChanged при остановке отладчика

            // Открытие порта
            try
            {
                channel.Open();
            }
            catch (Exception ex)
            {
                error = new Exception("Ошибка окрытия канала: " + ex.Message);
                goto end;
            }

            this.EngineStatus = DebuggerEngineStatus.Started;
            this.RaiseEngineStatusChangedEvent(new DebuggerEngineStatusChangedEventArgs(DebuggerEngineStatus.Started, null));
            // Получение типа подключенного контроллера
            string ControllerType = channel.ReadControllerType();;

            if (ControllerType == null)
            {
                // Контроллер либо вообще не найден, либо не соответствует настройкам отладчика
                error = new Exception("Контроллер не найден");
                goto end;
            }

            this.maxRequestSize = 128;
            channel.BufferSize  = this.maxRequestSize;

            this.RebuildRequests();
            // Выполнение запросов
            Stopwatch watch = new Stopwatch(); // отслеживает время выполнения очереди запросов

            while (true)
            {
                bool requestsProceeded = false;
                watch.Start();
                try
                {
                    // Если требуется остановить отладчик, то выходим из цикла
                    if (this.EngineStatus == DebuggerEngineStatus.Stopping)
                    {
                        goto end;
                    }
                    // Если есть запросы на запись, то обрабатываем их
                    if (this.writeItems.Count != 0)
                    {
                        this.ProceedWriteItems(channel);
                    }
                    // Цикл по всем типам памяти, которые присутствуют в очереди
                    foreach (List <ReadRequest> requests in this.requestsByMemory.Values)
                    {
                        // Если требуется остановить отладчик, то выходим из цикла
                        if (this.EngineStatus == DebuggerEngineStatus.Stopping)
                        {
                            goto end;
                        }
                        // Цикл по всем запросам в текущей области памяти
                        for (int i = 0; i < requests.Count; i++)
                        {
                            //Console.WriteLine("/---------------" + DateTime.Now.Millisecond.ToString());
                            // Если есть запросы на запись, то обрабатываем их
                            if (this.writeItems.Count != 0)
                            {
                                this.ProceedWriteItems(channel);
                            }
                            // Обрабатываем запрос на чтение
                            ReadRequest request = requests[i];
                            if (this.lockingActive && request.MemoryType == this.lockingMemoryType &&
                                request.Address <= this.lockingAddress &&
                                request.EndByteOffset >= this.lockingAddress + this.lockingLength - 1)
                            {
                                continue;
                            }
                            requestsProceeded = true;
                            // Если требуется остановить отладчик, то выходим из цикла
                            if (this.EngineStatus == DebuggerEngineStatus.Stopping)
                            {
                                goto end;
                            }
                            byte[] response = channel.ReadFromMemory(request.MemoryType, request.Address, request.BytesToRead);;
                            // Учтснавливаем число прочитанных пакетов
                            if (response == null)
                            {
                                Console.WriteLine("-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-");
                                this.NearErrors = (this.NearErrors % 3) + 1;
                                if (this.NearErrors == 3)
                                {
                                    this.ErrorReadedRequestsCount++;
                                }
                            }
                            else
                            {
                                this.NearErrors = 0;
                                this.ReadedRequestsCount++;
                            }
                            // Обработка всех элементов запроса
                            foreach (RequestItem item in request.Items)
                            {
                                int itemStart = Math.Max(item.Address, request.Address);             // индекс первого байта элемента в даных запроса
                                int itemEnd   = Math.Min(item.EndByteOffset, request.EndByteOffset); // индекс последнего байта элемента в данных запроса
                                if (response != null)
                                {
                                    // Добавляем в элемент считанные данные
                                    try
                                    {
                                        Array.Copy(response, itemStart - request.Address, item.Data, itemStart - item.Address, itemEnd - itemStart + 1);
                                    }
                                    catch
                                    {
                                        ;
                                    }
                                }
                                else
                                {
                                    item.Error = true;
                                }
                                if (item.ProgressChangedCallback != null)
                                {
                                    // Элемент надо информировать о процессе получения данных
                                    byte[] buffer = null;
                                    if (response != null)
                                    {
                                        // Получаем данные элемента, считанные за текущий запрос
                                        buffer = new byte[itemEnd - itemStart + 1];
                                        Array.Copy(response, itemStart - request.Address, buffer, 0, itemEnd - itemStart + 1);
                                    }
                                    // Устанавливаем параметры для выполнения события
                                    object[] Params = new object[4];
                                    Params[0] = item.ProgressChangedCallback;
                                    Params[1] = item.Sender;
                                    Params[2] = (double)(itemEnd - item.Address + 1) / (item.Data.Length);
                                    Params[3] = buffer;
                                    // Выплняем Callback в главном потоке
                                    this.asyncOp.Post(this.exProgressChangedDelegate, Params);
                                }
                                if (item.ProceedingCompletedCallback != null && item.EndByteOffset <= request.EndByteOffset)
                                {
                                    // Нужно проинформировать элемент о завершении получения данных
                                    // Устанавливаем параметры для выполнения события
                                    object[] Params = new object[4];
                                    Params[0] = item.ProceedingCompletedCallback;
                                    Params[1] = item.Sender;
                                    Params[2] = item.Data;
                                    Params[3] = item.Error;
                                    // Выполняем Callback в главном потоке
                                    this.asyncOp.Post(this.exProceedingCompleetedDelegate, Params);
                                    item.Error = false;
                                }
                            }
                            //Console.WriteLine("\\---------------" + DateTime.Now.Millisecond.ToString());
                        }
                    }
                }
                catch { }
                watch.Stop();
                if (!requestsProceeded)
                {
                    // Движок работает "в холостую"
                    this.RaiseRequestTimeChangedEvent(new EventArgs <int>(0));
                    Thread.Sleep(500);
                }
                else
                {
                    // Возвращаем новое значение времени обработки всех запросов
                    this.RaiseRequestTimeChangedEvent(new EventArgs <int>((int)watch.ElapsedMilliseconds));
                }
                watch.Reset();
            }
end:
            // Завершение работы отладчика
            this.RaiseRequestTimeChangedEvent(new EventArgs <int>(0));
            channel.Close();
            this.EngineStatus = DebuggerEngineStatus.Stopped;
            this.RaiseEngineStatusChangedEvent(new DebuggerEngineStatusChangedEventArgs(DebuggerEngineStatus.Stopped, error));
            this.asyncOp.OperationCompleted();
        }
コード例 #18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CallSubscripter"/> class.
 /// </summary>
 /// <param name="chnl">The CHNL.</param>
 public CallSubscripter(AbstractChannel chnl)
 {
     name = "Call Subscripter";
     channel = chnl;
 }
コード例 #19
0
        public static void TestChannel(this AbstractChannel ind, string filename, int length)
        {
            Quantum q = Quantum.ExcelToQuantum(filename, "symbol", 0);

            var dz = new DenseMatrix(4 + 3, q.Data.Count);

            List <string> names = new List <string>();

            names.Add("symbol");
            names.Add("HIGH");
            names.Add(ind.ToString());
            names.Add("LOW");

            //chartoptions
            ChartOption[] chartOptions = new ChartOption[names.Count];
            chartOptions[0] = new ChartOption()
            {
                Height = 500, YPosition = 0
            };
            chartOptions[1] = new ChartOption()
            {
                Height = 0, YPosition = 0, Layover = true
            };
            chartOptions[2] = new ChartOption()
            {
                Height = 0, YPosition = 0, Layover = true
            };
            chartOptions[3] = new ChartOption()
            {
                Height = 0, YPosition = 0, Layover = true
            };

            int counter = 0;

            foreach (Tick tick in q)
            {
                ind.HandleNextTick(tick);
                dz[0, counter] = tick.BidOpen;
                dz[1, counter] = tick.BidHigh;
                dz[2, counter] = tick.BidLow;
                dz[3, counter] = tick.BidClose;
                dz[4, counter] = ind.HI(0);
                dz[5, counter] = ind.MID(0);
                dz[6, counter] = ind.LOW(0);

                counter++;
            }

            Visualize.GenerateMultiPaneGraph(new[] { "data", "high", ind.ToString(), "low" }, q.Data.Keys.ToArray(), dz, QSConstants.DEFAULT_DATA_FILEPATH + @"results.html"
                                             , new ChartOption[]
            {
                new ChartOption()
                {
                    Height = 500
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                }
            });

            Console.WriteLine("Done Generating Graph for " + ind.ToString());
        }
コード例 #20
0
 public StreamSocketChannelUnsafe(AbstractChannel channel)
     : base(channel)
 {
 }
コード例 #21
0
        public static void TestChannelLive(this AbstractChannel ind, string symbol, string timeframe, int length)
        {
            //------------grab data
            FXSession session = new FXSession();

            session.InitializeSession();
            while (!session.LoggedIn)
            {
                Thread.Sleep(100);
            }

            HistoricPriceEngine h = new HistoricPriceEngine(session);

            h.GetLongHistoricPrices(symbol, timeframe, length);

            while (!h.Complete)
            {
                Thread.Sleep(100);
            }
            //-----------------------

            var highList = new List <double>();
            var medList  = new List <double>();
            var lowList  = new List <double>();

            var dataList     = new List <double>();
            var dateTimeList = new SortedList <DateTime, int>();

            Quantum q = h.Data;

            int count = 0;

            foreach (Tick t in q)
            {
                try{
                    ind.HandleNextTick(t);
                    highList.Add(ind.HI(0));
                    medList.Add(ind.MID(0));
                    lowList.Add(ind.LOW(0));

                    dataList.Add(t.BidClose);
                    dateTimeList.Add(t.Time, 1);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                if (count++ > length)
                {
                    break;
                }
            }

            var dz = new DenseMatrix(4, medList.Count);

            dz.SetRow(0, new DenseVector(dataList.ToArray()));
            dz.SetRow(1, new DenseVector(highList.ToArray()));
            dz.SetRow(2, new DenseVector(medList.ToArray()));
            dz.SetRow(3, new DenseVector(lowList.ToArray()));

            Visualize.GenerateMultiPaneGraph(new[] { "data", "high", ind.ToString(), "low" }, dateTimeList.Keys.ToArray(), dz, QSConstants.DEFAULT_DATA_FILEPATH + @"results.html"
                                             , new ChartOption[]
            {
                new ChartOption()
                {
                    Height = 500
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                },
                new ChartOption()
                {
                    Height = 0, Layover = true, YPosition = 0
                }
            });

            Console.WriteLine("Done Generating Graph for " + ind.ToString());
        }
コード例 #22
0
 public DefaultUnsafe(AbstractChannel channel)
     : base(channel)
 {
 }
コード例 #23
0
 public void Start(AbstractChannel port, LoaderMode mode)
 {
     _port = port;
     _mode = mode;
     this.RunWorkerAsync();
 }
コード例 #24
0
ファイル: TcpSocketChannel.cs プロジェクト: softchar/HiPush
 public TcpChannelInvoker(AbstractChannel parent) : base(parent)
 {
 }
コード例 #25
0
 protected void AttachChannel(string indicatorName, AbstractChannel i)
 {
     channelList.Add(indicatorName, i);
 }