コード例 #1
0
        private byte[] Receive()
        {
            if (MessageStream == null)
            {
                return(null);
            }
            int readLength = config.MaskConfig.MinBytesCountToCheck;

            byte[] checkData = new byte[readLength];
            int    offset = 0, numberReadData = 0;

            do
            {
                numberReadData = MessageStream.Receive(checkData, offset, readLength);
                offset        += numberReadData;
                readLength    -= numberReadData;
            } while (readLength > 0 && numberReadData > 0);

            config.MessageToModelConfig cfg = config.MessageConfigs.GetQulifiedMessageToModel(checkData);
            MessageToModelConfig = cfg;
            if (cfg == null)
            {
                throw new MessageProcessorException("Unrecognized message. Check message-to-model elements in configuration file."
                                                    + Environment.NewLine
                                                    + readLength + " first bytes of message: " + MessageUtility.HexToReadableString(checkData));
            }

            byte[] lengthHeader             = new byte[cfg.ModelCfg.MessageCfg.LengthHeader];
            Array.Copy(checkData, lengthHeader, lengthHeader.Length);
            int messageLength = (int)MessageUtility.BytesToInt(lengthHeader);

            messageLength += lengthHeader.Length;

            byte[] data = new byte[messageLength];
            Array.Copy(checkData, data, checkData.Length);
            offset     = checkData.Length;
            readLength = messageLength - checkData.Length;
            do
            {
                numberReadData = MessageStream.Receive(data, offset, readLength);
                offset        += numberReadData;
                readLength    -= numberReadData;
            } while (readLength > 0 && numberReadData > 0);
            return(data);
        }
コード例 #2
0
        public override void Parse()
        {
            Type IMaskType = typeof(IMask);

            MethodInfo[] methods = _mapping.GetMethods(BindingFlags.Public | BindingFlags.Static);
            foreach (var m in methods)
            {
                if (!IMaskType.IsAssignableFrom(m.ReturnType) || m.GetParameters().Length > 0)
                {
                    continue;
                }
                var attr = GetAttribute <MessageToModelAttribute>(m);
                if (attr == null)
                {
                    continue;
                }

                MessageToModelConfig cfg = new MessageToModelConfig();
                string sourceMsg         = "Check mapping defined by " + m.Name + " method of " + _mapping.FullName + " class.";

                if (attr.Model == null)
                {
                    throw new ConfigParserException("Model must be defined. " + sourceMsg);
                }
                cfg.ModelCfg = ParseModel(attr.Model, sourceMsg);

                MethodInfo processMethod = null;
                if (attr.ProcessClass == null)
                {
                    cfg.ProcessModel = null;
                }
                else
                {
                    CheckRequired(attr, "ProcessMethod", sourceMsg);
                    cfg.ProcessModel = ParseDelegate(typeof(ProcessModel <,>), attr.ProcessClass, attr.ProcessMethod, sourceMsg);
                    processMethod    = cfg.ProcessModel.Method;
                }

                cfg.MaskList.Add((m.Invoke(null, null) as IMask).GetConfig(attr.Model, processMethod));
                MessageConfigs.MessageToModels.Add(cfg);
            }
        }