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); } } }
/// <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); } }
/// <summary> /// Установить DataReadInfo, где хранится информация о читаемых данных - идентификаторы, имена. /// </summary> /// <param name="aData">Список данных.</param> public void SetData(DataReadInfo[] aData) { data = aData; }