/// <summary> /// Handler for the IChannel.ReceiveError event /// </summary> /// <param name="error">The error code</param> /// <param name="message">The error message</param> /// <param name="channel">The channel signaling the error</param> public void OnChannelReceiveError(int error, string message, IChannel channel) { string uri = channel.Uri; if (error == (int)SocketChannel.SocketErrors.RemoteClosed) { CommObjects.ChannelManager.CloseChannel(uri); FecsMain.Logger.AddLog(string.Format("Client {0} disconnected (outqueue)", uri), LoggerSeverities.Info); //>> LDR 2004.05.05 string ip; int port; TcpIpUri.UriAsAddressPort(channel.Uri, out ip, out port); FecsBecsHeader hd = new FecsBecsHeader(channel.Uri, ip, new PacketData(System.DateTime.Now, "-1")); _outQueue.Send(hd, "<s1 id=\"0\"><uri>" + channel.Uri + "</uri></s1>"); //<< LDR 2004.05.05 //>> LDR 2004.07.16 // channel.SendError -= new ErrorHandler(OnChannelSendError); // channel.IncomingMessage -= // new MessageHandler(OnChannelIncomingMessage); // channel.ReceiveError -= // new ErrorHandler(OnChannelReceiveError); //<< LDR 2004.07.16 } else if (CommObjects.ChannelManager.GetChannel(uri) != null) { FecsMain.Logger.AddLog(string.Format("[{2}]Error receiving from {0}: {1} ({2})", channel.Uri, error, message), LoggerSeverities.Error); } }
/// <summary> /// Handler for the IChannel.IncomingMessage event /// </summary> /// <param name="msg">The message received</param> /// <param name="channel">The channel that received the message</param> public void OnChannelIncomingMessage(OPSTelegrama msg, IChannel channel) { if (ValidateMessage(msg)) { string ip; int port; TcpIpUri.UriAsAddressPort(channel.Uri, out ip, out port); IPacketizer packetizer = msg.Packetizer; FecsBecsHeader hd = new FecsBecsHeader(channel.Uri, ip, packetizer.PacketInfo); for (int i = 0; i < packetizer.PacketsCount; i++) { _outQueue.Send(hd, packetizer[i]); FecsMain.Logger.AddLog( string.Format("[OutputQueueFecsAdapter]:Message received from {0} [{1}]", channel.Uri, msg.XmlData), LoggerSeverities.Info); } } else { FecsMain.Logger.AddLog( string.Format("[OutputQueueFecsAdapter]:Message not validated from {0} [{1}]", channel.Uri, msg.XmlData), LoggerSeverities.Error); NackMessage(msg, channel); } }
private void OnInQueueReceiveCompleted(FecsBecsHeader header, string body) { if (_channelMgr != null) { string uri = header.ID; IChannel channel = _channelMgr.GetChannel(uri); if (channel == null) { channel = _channelMgr.OpenChannel(uri, ChannelType.BecsQueue); if (channel != null) { MessageProcessorManager.OnNewConnection(channel); } } if (channel != null) { BecsChannel bc = (BecsChannel)channel; StringBuilder packet = new StringBuilder(256); packet.AppendFormat(null, "<{0} {1}=\"{2}\" {3}=\"{4}\">{5}</{0}>", Tags.Packet, Tags.PacketSrcAttr, header.PacketInfo.SourceId, Tags.PacketDateAttr, Dtx.DtxToString(header.PacketInfo.Dtx), body); string xml = packet.ToString(); ILogger localLogger = null; try { Database d = null; CmpUnitsDB cmpUnits = new CmpUnitsDB(); //d = DatabaseFactory.GetDatabase(); localLogger = DatabaseFactory.Logger; if (localLogger != null) { localLogger.AddLog("[OnInQueueReceiveCompleted]: Updating ID: " + header.PacketInfo.SourceId + " IP :" + header.IP, LoggerSeverities.Debug); } if (Convert.ToInt32(header.PacketInfo.SourceId) != -1) { if (cmpUnits.UpdateIP(Convert.ToInt32(header.PacketInfo.SourceId), header.IP) != 1) { if (localLogger != null) { localLogger.AddLog("[OnInQueueReceiveCompleted]: Error Updating IP", LoggerSeverities.Debug); } } else { if (localLogger != null) { localLogger.AddLog("[OnInQueueReceiveCompleted]: Update OK", LoggerSeverities.Debug); } } } } catch { // Do not do nothing?? // Si tenemos un error en realizar un update de la ip // no hacemos nada if (localLogger != null) { localLogger.AddLog("[OnInQueueReceiveCompleted]: Error Updating IP", LoggerSeverities.Debug); } } Interlocked.Increment(ref _packetId); OPSTelegrama opsTel = OPSTelegramaFactory.CreateOPSTelegrama(_packetId, xml); bc.ReceiveMessage(opsTel); } } }