Example #1
0
        /// <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);
            }
        }
Example #2
0
 /// <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);
                }
            }
        }