public virtual void call(Object stateInfo)
            {
                isFinished = false;
                thread     = Thread.CurrentThread;

                try
                {
                    if (!owner.shutDown)
                    {
                        owner.sendCommand(owner.processCommand(cmd));
                    }
                }
                catch (SocketException ex)
                {
                    Logger.getLogger(Log.CLIENTS).info("Socket exception while processing command: " + ex.Message, ex);
                }
                catch (Exception ex)
                {
                    Logger.getLogger(Log.CLIENTS).warn("Error processing command: " + ex.Message, ex);
                }
                finally
                {
                    owner.commandsInProgress--;
                    isFinished = true;
                }
            }
            public override void handle(Event anEvent)
            {
                if (owner.shutDown)
                {
                    throw new ObsoleteListenerException("Client constoller was stopped");
                }

                try
                {
                    OutgoingAggreGateCommand cmd = this.owner.constructEventCommand(anEvent, this.getListenerCode());

                    owner.sendCommand(cmd);
                }
                catch (SocketException ex)
                {
                    owner.shutdown();
                    const string msg = "Socket exception while forwarding event to client: ";
                    Logger.getLogger(Log.CLIENTS).info(msg + ex);
                    Logger.getLogger(Log.CLIENTS).debug(msg + ex.Message, ex);
                }
                catch (Exception ex)
                {
                    throw new EventHandlingException(
                              String.Format(Cres.get().getString("clErrorHandlingEvent"), anEvent.getName()) + ex.Message, ex);
                }
            }