private void OnDataAvailable(DataReadInfo dr)
        {
            SocketMessager messager = SocketMessager.Parse(dr.ResponseStream.ToArray());

            if (string.Compare(messager.Action, SocketMessager.SYS_QUIT.Action) == 0)
            {
                dr.AcceptSocket.Close();
            }
            else if (string.Compare(messager.Action, SocketMessager.SYS_TEST_LINK.Action) != 0)
            {
                ReceiveEventArgs e       = new ReceiveEventArgs(this._receives++, messager, this);
                SyncReceive      receive = null;

                if (this._receiveHandlers.TryGetValue(messager.Id, out receive))
                {
                    this._server._receiveSyncWQ.Enqueue(delegate() {
                        try {
                            receive.ReceiveHandler(this, e);
                        } catch (Exception ex) {
                            this.OnError(ex);
                        } finally {
                            receive.Wait.Set();
                        }
                    });
                }
                else
                {
                    this._server._receiveWQ.Enqueue(delegate() {
                        this.OnReceive(e);
                    });
                }
            }
            this._lastActive = DateTime.Now;
            HandleDataReceived();
        }
        private void HandleDataReceived()
        {
            if (this._running)
            {
                try {
                    NetworkStream ns = this._tcpClient.GetStream();
                    ns.ReadTimeout = 1000 * 20;

                    DataReadInfo dr = new DataReadInfo(DataReadInfoType.Head, this, ns, BaseSocket.HeadLength, BaseSocket.HeadLength);
                    dr.BeginRead();
                } catch (Exception ex) {
                    this._running = false;
                    this.OnError(ex);
                }
            }
        }
        static void HandleDataRead(IAsyncResult ar)
        {
            DataReadInfo dr = ar.AsyncState as DataReadInfo;

            if (dr.AcceptSocket._running)
            {
                int overs = 0;
                try {
                    overs = dr.NetworkStream.EndRead(ar);
                } catch (Exception ex) {
                    dr.AcceptSocket.OnError(ex);
                    return;
                }
                if (overs > 0)
                {
                    dr.ResponseStream.Write(dr.Buffer, 0, overs);
                    dr.OverZoreTimes = 0;
                }
                else if (++dr.OverZoreTimes > 10)
                {
                    return;
                }

                dr.Over -= overs;
                if (dr.Over > 0)
                {
                    dr.BeginRead();
                }
                else if (dr.Type == DataReadInfoType.Head)
                {
                    var bodySizeBuffer = dr.ResponseStream.ToArray();
                    if (int.TryParse(Encoding.UTF8.GetString(bodySizeBuffer, 0, bodySizeBuffer.Length), NumberStyles.HexNumber, null, out overs))
                    {
                        DataReadInfo drBody = new DataReadInfo(DataReadInfoType.Body, dr.AcceptSocket, dr.NetworkStream, 1024, overs - BaseSocket.HeadLength);
                        drBody.BeginRead();
                    }
                }
                else
                {
                    dr.AcceptSocket.OnDataAvailable(dr);
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Загрузить информацию конкретного DataReadInfo.
        /// </summary>
        /// <param name="aNode">XmlNode</param>
        /// <returns>Загруженный DataReadInfo</returns>
        private DataReadInfo LoadDataReadInfoFromNode(XmlNode aNode)
        {
            var dataInfo = new DataReadInfo();
            var nodes = aNode.ChildNodes;
            for (var fieldIndex = 0; fieldIndex < nodes.Count; ++fieldIndex) {
                switch (nodes[fieldIndex].Name) {
                    case NODE_OPC_ITEM_NAME:
                        dataInfo.OpcItemName = nodes[fieldIndex].InnerText;
                        break;
                    case NODE_OPC_TYPE_NAME:
                        dataInfo.TypeName = nodes[fieldIndex].InnerText;
                        break;
                    case NODE_OPC_OBJECT_NAME:
                        dataInfo.ObjectName = nodes[fieldIndex].InnerText;
                        break;
                    case NODE_OPC_DATA_NAME:
                        dataInfo.DataName = nodes[fieldIndex].InnerText;
                        break;
                }
            }

            return dataInfo;
        }
        /// <summary>
        /// Инициализация конфигруации. При появлении подключения к ИТЦ считываем идентификаторы данных и настраиваем их у себя.
        /// </summary>
        protected override void DoInitialize()
        {
            Logger.Info("Инициализация конфигурации...");
            var connection = oracleConnection.GetOracleConnection();
            var readDataInfoList = new List<DataReadInfo>();

            try {
                var commandText = "select t.NAME, o.NAME, d.NAME, t.ID, o.ID, d.ID " +
                                  "from TYPE_INFO t, OBJECT_INFO o, DATA_INFO d " +
                                  "where (d.TYPE_INFO_ID = t.ID) and (o.TYPE_INFO_ID = t.ID)";
                using (var command = new OracleCommand(commandText, connection)) {
                    using (var reader = command.ExecuteReader()) {
                        oracleConnection.UpdateLastOperationTime();
                        while (reader.Read()) {
                            var dataInfo = new DataReadInfo();
                            dataInfo.TypeName = (string)reader.GetValue(0);
                            dataInfo.ObjectName = (string)reader.GetValue(1);
                            dataInfo.DataName = (string)reader.GetValue(2);
                            dataInfo.TypeId = int.Parse(reader.GetValue(3).ToString());
                            dataInfo.ObjectId = int.Parse(reader.GetValue(4).ToString());
                            dataInfo.DataId = int.Parse(reader.GetValue(5).ToString());

                            readDataInfoList.Add(dataInfo);
                        }
                    }
                }
            }
            catch (Exception ex) {
                oracleConnection.ProcessError(ex);
            }

            try {
                SetIdsToDataInfo(readDataInfoList);
                WagstaffCurdataConfiguration.SetIdsToOpcItems(DataInfo);
                MixerCurrdataConfiguration.SetIdsToOpcItems(DataInfo);
                Logger.Info("Инициализация конфигурации прошла успешно.");
            }
            catch (Exception ex) {
                Logger.Info("Ошибка при инициализации конфигурации");
                Logger.Error("Ошибка при инициализации конфигурации: " + ex);
            }
        }
Beispiel #6
0
 /// <summary>
 /// Установить DataReadInfo, где хранится информация о читаемых данных - идентификаторы, имена.
 /// </summary>
 /// <param name="aData">Список данных.</param>
 public void SetData(DataReadInfo[] aData)
 {
     data = aData;
 }