Ejemplo n.º 1
0
        protected override void processMessageOperation(IncomingAggreGateCommand cmd, OutgoingAggreGateCommand ans)
        {
            base.processMessageOperation(cmd, ans);

            var context = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_CONTEXT);

            var conManager = getContextManager();
            var con        = conManager.get(context, getCallerController());

            if (con != null)
            {
                addNormalListener(con.getPath(), AbstractContext.E_UPDATED, getDefaultEventListener());
            }
        }
        public void processMessageStart(IncomingAggreGateCommand cmd, OutgoingAggreGateCommand ans)
        {
            var version = Int32.Parse(cmd.getParameter(AggreGateCommand.INDEX_PROTOCOL_VERSION));

            Logger.getLogger(Log.CLIENTS).debug("Processing start command, client protocol version: " + version);

            if (version == ClientCommandUtils.CLIENT_PROTOCOL_VERSION)
            {
                ans.constructReply(cmd.getId(), AggreGateCommand.REPLY_CODE_OK);
                startMessageReceived = true;
            }
            else
            {
                ans.constructReply(cmd.getId(), AggreGateCommand.REPLY_CODE_DENIED);
            }
        }
        public OutgoingAggreGateCommand processCommand(IncomingAggreGateCommand cmd)
        {
            var ans = new OutgoingAggreGateCommand();

            try
            {
                var commandCode = cmd.getParameter(AggreGateCommand.INDEX_COMMAND_CODE);

                if (commandCode.Length > 1)
                {
                    throw new AggreGateException(Cres.get().getString("clInvalidCmdCode") + commandCode);
                }

                switch (commandCode[0])
                {
                case AggreGateCommand.COMMAND_CODE_MESSAGE:
                    processMessage(cmd, ans);
                    break;

                default:
                    throw new AggreGateException(Cres.get().getString("clUnknownCmdCode") + commandCode[0]);
                }
            }
            catch (ContextSecurityException ex)
            {
                Logger.getLogger(Log.CLIENTS).info("Access denied while processing command '" + cmd + "': ", ex);
                ans.constructReply(cmd.getId(), AggreGateCommand.REPLY_CODE_DENIED);
            }
            catch (Exception ex)
            {
                Logger.getLogger(Log.CLIENTS).info("Error processing command '" + cmd + "': ", ex);
                ans.constructReply(cmd.getId(), AggreGateCommand.REPLY_CODE_ERROR, ex.Message ?? ex.ToString(),
                                   getErrorDetails(ex));
            }
            return(ans);
        }
        protected virtual void processMessageOperation(IncomingAggreGateCommand cmd, OutgoingAggreGateCommand ans)
        {
            var operation = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_CODE);
            var context   = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_CONTEXT);
            var target    = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_TARGET);

            if (operation.Length > 1)
            {
                throw new SyntaxErrorException(Cres.get().getString("clInvalidOpcode") + operation);
            }

            Logger.getLogger(Log.CLIENTS).debug("Processing message, context '" + context + "', target '" + target +
                                                "', operation '" + operation + "'");

            switch (operation[0])
            {
            case AggreGateCommand.COMMAND_OPERATION_ADD_EVENT_LISTENER:
                var listenerStr = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_LISTENER);
                var listener    = listenerStr.Length > 0 ? (Int32?)Int32.Parse(listenerStr) : null;
                processOperationAddEventListener(cmd.getId(), context, target, listener, ans);
                return;

            case AggreGateCommand.COMMAND_OPERATION_REMOVE_EVENT_LISTENER:
                listenerStr = cmd.getParameter(AggreGateCommand.INDEX_OPERATION_LISTENER);
                listener    = listenerStr.Length > 0 ? (Int32?)Int32.Parse(listenerStr) : null;
                processOperationRemoveEventListener(cmd.getId(), context, target, listener, ans);
                return;
            }

            var con = contextManager.get(context, callerController);

            if (con == null)
            {
                throw new ContextException(Cres.get().getString("conNotAvail") + context);
            }

            if (addNormalListener(con.getPath(), AbstractContext.E_DESTROYED, defaultEventListener))
            {
                addNormalListener(con.getPath(), AbstractContext.E_CHILD_ADDED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_CHILD_REMOVED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_VARIABLE_ADDED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_VARIABLE_REMOVED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_FUNCTION_ADDED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_FUNCTION_REMOVED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_EVENT_ADDED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_EVENT_REMOVED, defaultEventListener);
                addNormalListener(con.getPath(), AbstractContext.E_INFO_CHANGED, defaultEventListener);

                addCustomListeners(con);
            }

            switch (operation[0])
            {
            case AggreGateCommand.COMMAND_OPERATION_GET_VAR:
                processOperationGetVar(cmd.getId(), con, target, ans);
                break;

            case AggreGateCommand.COMMAND_OPERATION_SET_VAR:
                processOperationSetVar(cmd.getId(), con, target, cmd.getEncodedDataTableFromOperationMessage(), ans);
                break;

            case AggreGateCommand.COMMAND_OPERATION_CALL_FUNCTION:
                processOperationCallFunction(cmd.getId(), con, target, cmd.getEncodedDataTableFromOperationMessage(),
                                             ans);
                break;

            default:
                throw new SyntaxErrorException(Cres.get().getString("clUnknownOpcode") + operation[0]);
            }
        }