Exemple #1
0
        // Load Protocol XML and merge to current protocol group
        public bool LoadFile(string strFileName)
        {
            try
            {
                TextReader                reader        = new StreamReader(strFileName);
                XmlSerializer             serializer    = new XmlSerializer(typeof(ProtocolXml.ProtocolTypes));
                ProtocolXml.ProtocolTypes protocolTypes = (ProtocolXml.ProtocolTypes)serializer.Deserialize(reader);
                reader.Close();

                foreach (var itDataType in protocolTypes.DataType)
                {
                    SystemTypeInfo.AddTypeInfo(itDataType);
                }
            }
            catch (XmlException xe)
            {
                Console.WriteLine("XML Parse Error: " + xe.Message);
                return(false);
            }
            catch (InvalidOperationException ioe)
            {
                Console.WriteLine("XML Serialization Error: " + ioe.Message);

                return(false);
            }
            catch (SystemException se)
            {
                Console.WriteLine("System Error: " + se.Message);
                return(false);
            }

            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 获取所有的功能树Json
        /// </summary>
        /// <returns></returns>
        public ActionResult GetAllJsTreeJson()
        {
            List <JsTreeData> treeList = new List <JsTreeData>();
            SystemTypeInfo    typeInfo = BLLFactory <SystemType> .Instance.FindByOID(ConfigData.SystemType);

            if (typeInfo != null)
            {
                var        pid   = typeInfo.OID;
                JsTreeData pNode = new JsTreeData(pid, typeInfo.Name);
                treeList.Add(pNode);

                string systemType = typeInfo.OID;//系统标识ID
                //绑定树控件
                List <FunctionNodeInfo> functionList = BLLFactory <Function> .Instance.GetTree(systemType);

                foreach (FunctionNodeInfo info in functionList)
                {
                    JsTreeData item = new JsTreeData(info.ID, info.Name, "fa fa-key icon-state-danger icon-lg");
                    pNode.children.Add(item);

                    AddJsTreeChildNode(info.Children, item);
                }
            }

            return(ToJsonContent(treeList));
        }
Exemple #3
0
        public virtual string ToTargetTypeName(Parameter param)
        {
            var typeInfo = SystemTypeInfo.GetParameterInfo(param);

            if (IsCPPOut)
            {
                return(typeInfo.CPPTypeName);// SystemTypeInfo.ToCPPType(type);
            }

            if (IsCSharpNative)
            {
                //if (csType == typeof(string))
                if (typeInfo.IsString)
                {
                    return("byte[]");
                }
                else if (typeInfo.IsCSharpStruct)
                {
                    return("ref " + typeInfo.CSharpTypeName);
                }
                else if (typeInfo.IsEnum)
                {
                    return("int");
                }
                else
                {
                    return(typeInfo.CSharpTypeName);
                }
            }

            return(typeInfo.CSharpTypeName);
        }
Exemple #4
0
        /// <summary>
        /// 新增状态下的数据保存
        /// </summary>
        /// <returns></returns>
        public override bool SaveAddNew()
        {
            SystemTypeInfo info = new SystemTypeInfo();

            SetInfo(info);

            try
            {
                #region 新增数据
                //检查是否还有其他相同关键字的记录
                bool exist = BLLFactory <SystemType> .Instance.IsExistKey("OID", info.OID);

                if (exist)
                {
                    MessageDxUtil.ShowTips("指定的【系统标识】已经存在,不能重复添加,请修改");
                    return(false);
                }

                bool succeed = BLLFactory <SystemType> .Instance.Insert(info);

                if (succeed)
                {
                    //可添加其他关联操作

                    return(true);
                }
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(LogLevel.LOG_LEVEL_CRIT, ex, typeof(FrmEditSystemType));
                MessageDxUtil.ShowError(ex.Message);
            }
            return(false);
        }
Exemple #5
0
        // Builder parameters size
        public void BuildParamSize(Parameter[] parameters, string strSizeVarName)
        {
            // size calculation
            MatchIndent();
            OutStream.Write(string.Format("int {0} = sizeof(UInt64)*2 ", strSizeVarName));

            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    NewLine(); MatchIndent(1);
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                    if (typeInfo.IsString)
                    {
                        OutStream.Write("+ binWriter.StringEncoder.GetByteCount({0}) + 1 + 2", InParamName(param.Name));
                    }
                    else
                    {
                        if (param.IsArray)
                        {
                            OutStream.Write("+ Marshal.SizeOf({0})*({1}.Length) + sizeof(UInt16)", typeInfo.CSharpTypeName, InParamName(param.Name));
                        }
                        else
                        {
                            OutStream.Write("+ Marshal.SizeOf({0})", typeInfo.CSharpTypeName);
                        }
                    }
                }
            }

            OutStream.WriteLine(";");
        }
Exemple #6
0
        // Builder parameter string
        public void PrepareSendFunctionParametersCPP(string strPrefix, Parameter[] parameter)
        {
            TypeUsage from = TypeUsage.CPPForSharp;
            TypeUsage to   = ParameterMode;

            if (parameter == null)
            {
                return;
            }

            foreach (Parameter param in parameter)
            {
                string paramElementTypeName = SystemTypeInfo.ElementTypeNameFor(from, param);
                string paramTypeNameOnly    = SystemTypeInfo.TypeNameOnlyFor(from, param);
                string paramTypeFrom        = SystemTypeInfo.TypeNameFor(from, param);
                string paramTypeTo          = SystemTypeInfo.TypeNameFor(to, param);
                var    typeInfo             = SystemTypeInfo.GetParameterInfo(param);
                //Type scharpType = SystemTypeInfo.ToCSharpType(param.Type);
                bool paramTypeEquality = paramTypeFrom == paramTypeTo;

                //bool bIsStruct = IsStruct(param.Type);

                // Disable native conversion
                if (param.IsArray) // string type
                {
                    if (IsStrType(param))
                    {
                        string varName = string.Format("{0}{1}", strPrefix, InParamName(param.Name));
                        MatchIndent(); OutStream.WriteLine("auto& {0}Array_ = *NativeToObject<SF::ArrayObject<const char*>>({0});", varName);
                    }
                }
            }
        }
        /// <summary>
        /// 数据显示的函数
        /// </summary>
        public override void DisplayData()
        {
            InitDictItem();//数据字典加载(公用)

            if (Id > 0)
            {
                #region 显示客户信息
                SystemTypeInfo info = BLLFactory <SystemType> .Instance.FindById(Id);

                if (info != null)
                {
                    this.txtOid.Text  = info.Gid;
                    txtName.Text      = info.Name;
                    txtCustomID.Text  = info.ConsumerCode;
                    txtAuthorize.Text = info.Licence;
                    txtNote.Text      = info.Remark;

                    this.txtOid.Enabled = false;
                }
                #endregion
            }
            else
            {
            }
        }
Exemple #8
0
        /// <summary>
        /// 数据显示的函数
        /// </summary>
        public override void DisplayData()
        {
            InitDictItem();//数据字典加载(公用)

            if (!string.IsNullOrEmpty(ID))
            {
                #region 显示客户信息
                SystemTypeInfo info = BLLFactory <SystemType> .Instance.FindByID(ID);

                if (info != null)
                {
                    this.txtOid.Text  = info.OID;
                    txtName.Text      = info.Name;
                    txtCustomID.Text  = info.CustomID;
                    txtAuthorize.Text = info.Authorize;
                    txtNote.Text      = info.Note;

                    this.txtOid.Enabled = false;
                }
                #endregion
            }
            else
            {
            }
        }
Exemple #9
0
 /// <summary>
 /// 编辑或者保存状态下取值函数
 /// </summary>
 /// <param name="info"></param>
 private void SetInfo(SystemTypeInfo info)
 {
     info.Name               = txtName.Text;
     info.CustomID           = txtCustomID.Text;
     info.Authorize          = txtAuthorize.Text;
     info.Note               = txtNote.Text;
     info.CurrentLoginUserId = Portal.gc.UserInfo.ID;
 }
 /// <summary>
 /// 编辑或者保存状态下取值函数
 /// </summary>
 /// <param name="info"></param>
 private void SetInfo(SystemTypeInfo info)
 {
     info.Name               = txtName.Text;
     info.ConsumerCode       = txtCustomID.Text;
     info.Licence            = txtAuthorize.Text;
     info.Remark             = txtNote.Text;
     info.CurrentLoginUserId = Portal.gc.UserInfo.Id;
 }
Exemple #11
0
        public void PrepareCallNative(Parameter[] parameter)
        {
            string strPrefix = "";

            if (parameter == null)
            {
                return;
            }


            // 1. Prepare local variables;
            foreach (Parameter param in parameter)
            {
                var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                //Type csharpType = SystemTypeInfo.ToCSharpType(param.Type);

                bool IsArray = param.IsArray | typeInfo.IsCSharpArray;

                if (IsArray) // array
                {
                    // Nothing for now
                }
                else if (IsStrType(param)) // string type
                {
                    // Nothing for now
                }
                else if (IsVariableSizeType(param))
                {
                    MatchIndent(); OutStream.WriteLine("var {0}{1}_ = {0}{1}.ToByteArray();", strPrefix, InParamName(param.Name));
                }
            }

            //2. Prepare pinned variables or something with using statement
            foreach (Parameter param in parameter)
            {
                var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                //Type csharpType = SystemTypeInfo.ToCSharpType(param.Type);

                bool IsArray = param.IsArray | typeInfo.IsCSharpArray;

                if (IsArray)              // array
                {
                    if (IsStrType(param)) // string type
                    {
                        MatchIndent(); OutStream.WriteLine("using (var {0}{1}Array = new ArrayObjectString({0}{1}))", strPrefix, InParamName(param.Name));
                    }
                }
                else if (IsStrType(param)) // string type
                {
                    // Nothing for now
                }
                else if (IsVariableSizeType(param))
                {
                    MatchIndent(); OutStream.WriteLine("using (var {0}{1}_PinnedPtr_ = new PinnedByteBuffer({0}{1}_))", strPrefix, InParamName(param.Name));
                }
            }
        }
Exemple #12
0
        // Builder parameter string
        public string ParamInString(string strPrefix, Parameter[] parameter)
        {
            string strParams = "", strComma = "";

            if (parameter == null)
            {
                return(strParams);
            }

            foreach (Parameter param in parameter)
            {
                strParams += strComma;
                if (strComma.Length == 0)
                {
                    strComma = ", ";
                }

                var typeName = ToTargetTypeName(param);
                var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                //Type csharpType = SystemTypeInfo.ToCSharpType(param.Type);
                bool bIsStruct = typeInfo.IsCSharpStruct;
                bool IsArray   = param.IsArray;
                if (typeInfo.IsCSharpArray)
                {
                    IsArray = true;
                    if (ParameterMode == TypeUsage.CPPForSharp)
                    {
                        typeName = typeInfo.CPPTypeName + "*";
                    }
                }

                if (IsStrType(param)) // string type
                {
                    strParams += string.Format("{0} {1}{2}", typeName, strPrefix, InParamName(param.Name));
                }
                else if (IsArray) // array
                {
                    if (ParameterMode == TypeUsage.CSharpNative || ParameterMode == TypeUsage.CPPForSharp)
                    {
                        strParams += string.Format("{0} {1}_sizeOf{2},", ToTargetTypeName(m_ArraySizeParam), strPrefix, InParamName(param.Name));
                    }
                    strParams += string.Format("{0} {1}{2}", typeName, strPrefix, InParamName(param.Name));
                }
                else // generic type
                {
                    strParams += string.Format("{0} {1}{2}", typeName, strPrefix, InParamName(param.Name));
                }
            }

            return(strParams);
        }
Exemple #13
0
        // Builder parameter string
        public string ParamInString(string strPrefix, Parameter[] parameter)
        {
            string strParams = "", strComma = "";

            if (parameter == null)
            {
                return(strParams);
            }

            foreach (Parameter param in parameter)
            {
                strParams += strComma;
                if (strComma.Length == 0)
                {
                    strComma = ", ";
                }

                var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                //Type csType = SystemTypeInfo.ToCSharpType(param);
                //bool bIsStruct = IsStruct(csType);

                if (IsStrType(param)) // string type
                {
                    strParams += string.Format("string {0}{1}", strPrefix, InParamName(param.Name));
                }
                else if (param.IsArray) // array
                {
                    strParams += string.Format("{0}[] {1}{2}", typeInfo.CSharpTypeName, strPrefix, InParamName(param.Name));
                }
                else // generic type
                {
                    if (typeInfo.IsCSharpStruct)
                    {
                        strParams += string.Format("ref {0} {1}{2}", typeInfo.CSharpTypeName, strPrefix, InParamName(param.Name));
                    }
                    else
                    {
                        strParams += string.Format("{0} {1}{2}", typeInfo.CSharpTypeName, strPrefix, InParamName(param.Name));
                    }
                }
            }

            return(strParams);
        }
Exemple #14
0
        // Builder parameter string
        public string ParamMemberString(Parameter[] parameter)
        {
            string strParams = "", strComma = "";

            if (parameter == null)
            {
                return(strParams);
            }

            foreach (Parameter param in parameter)
            {
                strParams += strComma;
                if (strComma.Length == 0)
                {
                    strComma = ", ";
                }

                var typeInfo = SystemTypeInfo.GetParameterInfo(param);

                //Type csType = SystemTypeInfo.ToCSharpType(param.Type);

                if (IsStrType(param)) // string type
                {
                    strParams += string.Format("{0}", param.Name);
                }
                else if (param.IsArray) // array
                {
                    strParams += string.Format("{0}", param.Name);
                }
                else // generic type
                {
                    if (typeInfo.IsCSharpStruct)
                    {
                        strParams += string.Format("ref {0}", param.Name);
                    }
                    else
                    {
                        strParams += string.Format("{0}", param.Name);
                    }
                }
            }

            return(strParams);
        }
Exemple #15
0
        /// <summary>
        /// 获取菜单树Json字符串(Bootstrap的JSTree)
        /// </summary>
        /// <returns></returns>
        public ActionResult GetMenuJsTreeJson()
        {
            //如果是超级管理员,不根据角色获取,否则根据角色获取对应的分配权限
            //也就是说,公司管理员只能分配自己被授权的功能,而超级管理员不受限制
            bool isSuperAdmin = BLLFactory <User> .Instance.UserInRole(CurrentUser.Name, RoleInfo.SuperAdminName);

            List <JsTreeData> treeList = new List <JsTreeData>();

            //List<SystemTypeInfo> typeList = BLLFactory<SystemType>.Instance.GetAll();
            //foreach (SystemTypeInfo typeInfo in typeList)
            {
                //仅仅显示本系统的类型的话
                SystemTypeInfo typeInfo = BLLFactory <SystemType> .Instance.FindByOID(ConfigData.SystemType);

                JsTreeData pNode = new JsTreeData(typeInfo.OID, typeInfo.Name, "fa fa-home icon-state-warning icon-lg");
                treeList.Add(pNode);

                string systemType = typeInfo.OID;//系统标识ID

                //一般情况下,对Ribbon样式而言,一级菜单表示RibbonPage;二级菜单表示PageGroup;三级菜单才是BarButtonItem最终的菜单项。
                List <MenuNodeInfo> menuList = null;
                if (isSuperAdmin)
                {
                    menuList = BLLFactory <Menu> .Instance.GetTree(systemType);
                }
                else
                {
                    menuList = BLLFactory <Menu> .Instance.GetMenuNodesByUser(CurrentUser.ID, typeInfo.OID);
                }

                foreach (MenuNodeInfo info in menuList)
                {
                    JsTreeData item = new JsTreeData(info.ID, info.Name);
                    pNode.children.Add(item);
                    SetFileIcon(info, item);

                    AddJsTreeChildNode(info.Children, item);
                }
            }

            return(ToJsonContent(treeList));
        }
Exemple #16
0
        /// <summary>
        /// 根据用户角色获取其对应的所能访问的权限集合
        /// </summary>
        /// <param name="userId">当前用户ID</param>
        /// <returns></returns>
        public ActionResult GetRoleFunctionJsTreeByUser(int userId)
        {
            List <JsTreeData> treeList = new List <JsTreeData>();

            bool     isSuperAdmin = false;
            UserInfo userInfo     = BLLFactory <User> .Instance.FindByID(userId);

            if (userInfo != null)
            {
                isSuperAdmin = BLLFactory <User> .Instance.UserInRole(userInfo.Name, RoleInfo.SuperAdminName);
            }

            SystemTypeInfo typeInfo = BLLFactory <SystemType> .Instance.FindByOID(ConfigData.SystemType);

            if (typeInfo != null)
            {
                JsTreeData parentNode = new JsTreeData(typeInfo.OID, typeInfo.Name);

                //如果是超级管理员,不根据角色获取,否则根据角色获取对应的分配权限
                //也就是说,公司管理员只能分配自己被授权的功能,而超级管理员不受限制
                List <FunctionNodeInfo> allNode = new List <FunctionNodeInfo>();
                if (isSuperAdmin)
                {
                    allNode = BLLFactory <Function> .Instance.GetTree(typeInfo.OID);
                }
                else
                {
                    allNode = BLLFactory <Function> .Instance.GetFunctionNodesByUser(userId, typeInfo.OID);
                }

                AddJsTreeeFunctionNode(parentNode, allNode);
                treeList.Add(parentNode);
            }

            if (treeList.Count == 0)
            {
                treeList.Insert(0, new JsTreeData(-1, "无"));
            }

            return(ToJsonContent(treeList));
        }
Exemple #17
0
        /// <summary>
        /// 编辑状态下的数据保存
        /// </summary>
        /// <returns></returns>
        public override bool SaveUpdated()
        {
            //检查不同ID是否还有其他相同关键字的记录
            string condition = string.Format("Name ='{0}' and OID <> '{1}' ", this.txtName.Text, ID);
            bool   exist     = BLLFactory <SystemType> .Instance.IsExistRecord(condition);

            if (exist)
            {
                MessageDxUtil.ShowTips("指定的【系统名称】已经存在,不能重复添加,请修改");
                return(false);
            }

            SystemTypeInfo info = BLLFactory <SystemType> .Instance.FindByID(ID);

            if (info != null)
            {
                SetInfo(info);

                try
                {
                    #region 更新数据
                    bool succeed = BLLFactory <SystemType> .Instance.Update(info, info.OID);

                    if (succeed)
                    {
                        //可添加其他关联操作

                        return(true);
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    LogHelper.WriteLog(LogLevel.LOG_LEVEL_CRIT, ex, typeof(FrmEditSystemType));
                    MessageDxUtil.ShowError(ex.Message);
                }
            }
            return(false);
        }
Exemple #18
0
        protected virtual IActionIn CreateInput(IActionFieldInfo item)
        {
            var att = item.GetAttribute <ActionTypeSelection>();

            if (item.IsGenericArgument || att != null)
            {
                var typeSelection = new TypeSelection()
                {
                    Name = item.Name
                };

                if (att != null)
                {
                    var assignableTo = new SystemTypeInfo(att.AssignableTo);
                    typeSelection.Filter = info => info.IsAssignableTo(assignableTo);
                }

                return(typeSelection);
            }

            return(new ActionIn());
        }
Exemple #19
0
        public string VerifyUser(string userName, string userPassword, string serialNumber, string typeID)
        {
            string         text = "";
            bool           flag = false;
            SystemType     type = new SystemType();
            SystemTypeInfo info = type.FindByOID(typeID);

            if (info == null)
            {
                text = "系统[" + typeID + "]编号不存在,请与开发商联系!";
                flag = true;
            }

            if (flag)
            {
                return(text);
            }

            User user2 = new User();

            return(user2.VerifyUser(userName, userPassword, this.m_SessionID));
        }
Exemple #20
0
        /// <summary>
        /// 获取用户的可操作功能
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public ActionResult GetFunctionJsTreeJsonByUser(int userId)
        {
            List <JsTreeData> treeList = new List <JsTreeData>();

            SystemTypeInfo typeInfo = BLLFactory <SystemType> .Instance.FindByOID(ConfigData.SystemType);

            if (typeInfo != null)
            {
                JsTreeData parentNode        = new JsTreeData(typeInfo.OID, typeInfo.Name, "fa fa-sitemap  icon-state-warning icon-lg");
                List <FunctionNodeInfo> list = BLLFactory <Function> .Instance.GetFunctionNodesByUser(userId, typeInfo.OID);

                AddJsTreeeFunctionNode(parentNode, list);

                treeList.Add(parentNode);
            }

            if (treeList.Count == 0)
            {
                treeList.Insert(0, new JsTreeData(-1, "无"));
            }

            return(ToJsonContent(treeList));
        }
Exemple #21
0
        // Builder parameter string
        public string ParamInListString(TypeUsage from, string strPrefix, Parameter[] parameter)
        {
            TypeUsage     to        = ParameterMode;
            StringBuilder strParams = new StringBuilder(512);
            string        strComma  = ",";

            if (parameter == null)
            {
                return(strParams.ToString());
            }

            foreach (Parameter param in parameter)
            {
                strParams.Append(strComma);

                string paramElementTypeName = SystemTypeInfo.ElementTypeNameFor(from, param);
                string paramTypeNameOnly    = SystemTypeInfo.TypeNameOnlyFor(from, param);
                string paramTypeFrom        = SystemTypeInfo.TypeNameFor(from, param);
                string paramTypeTo          = SystemTypeInfo.TypeNameFor(to, param);
                var    typeInfo             = SystemTypeInfo.GetParameterInfo(param);
                //Type scharpType = SystemTypeInfo.ToCSharpType(param.Type);
                bool paramTypeEquality = paramTypeFrom == paramTypeTo;

                if (IsStrType(param)) // string type
                {
                    strParams.AppendFormat("{0}{1}", strPrefix, InParamName(param.Name));
                }
                else if (param.IsArray) // array
                {
                    if (from == TypeUsage.CPPForSharp)
                    {
                        strParams.AppendFormat("SF::ArrayView<const {2}>({0}_sizeOf{1}, {0}_sizeOf{1}, const_cast<{3}>({0}{1}))", strPrefix, InParamName(param.Name), paramElementTypeName, paramTypeNameOnly);
                    }
                    else
                    {
                        if (from == TypeUsage.CSharp)
                        {
                            strParams.AppendFormat("(ushort){0}{1}.Length, ", strPrefix, InParamName(param.Name));
                        }

                        if (from == TypeUsage.CSharp && typeInfo.IsEnum)
                        {
                            strParams.AppendFormat("GameTypes.ToIntArray({0}{1})", strPrefix, InParamName(param.Name));
                        }
                        else
                        {
                            strParams.AppendFormat("{0}{1}", strPrefix, InParamName(param.Name));
                        }
                    }
                }
                else // generic type
                {
                    if (typeInfo.IsCSharpStruct)
                    {
                        if (ParameterMode == TypeUsage.CSharp || ParameterMode == TypeUsage.CSharpNative)
                        {
                            strParams.AppendFormat("ref {0}{1}", strPrefix, InParamName(param.Name));
                        }
                        else
                        {
                            strParams.AppendFormat("{0}{1}", strPrefix, InParamName(param.Name));
                        }
                    }
                    else
                    {
                        if (paramTypeEquality)
                        {
                            strParams.AppendFormat(" {0}{1}", strPrefix, InParamName(param.Name));
                        }
                        else
                        {
                            strParams.AppendFormat("({2}) {0}{1}", strPrefix, InParamName(param.Name), paramTypeTo);
                        }
                    }
                }
            }

            return(strParams.ToString());
        }
Exemple #22
0
 // target type for output
 public override string ToTargetTypeName(Parameter param)
 {
     return(SystemTypeInfo.TypeNameFor(ParameterMode, param));
 }
Exemple #23
0
        // Build parser class implementation
        void BuildMessageClassParserImpl(string Name, string typeName, Parameter[] parameters)
        {
            OpenSection("public override void", "ParseMsg(BinaryMemoryReader binaryReader)", false);

            MatchIndent(); OutStream.WriteLine("var binReader = (PacketMemoryReader)binaryReader;");

            if (parameters == null)
            {
                // nothing to process
                MatchIndent(); OutStream.WriteLine("return;");
            }
            else
            {
                foreach (Parameter param in parameters)
                {
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                    //Type csType = SystemTypeInfo.ToCSharpType(param.Type);
                    switch (param.TypeName)
                    {
                    case "String":
                        MatchIndent(); OutStream.WriteLine(
                            string.Format("{0} = binReader.ReadString();", param.Name));
                        break;

                    default:
                        if (param.IsArray)
                        {
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("UInt16 {0} = 0;", ArrayLenName(param.Name)));
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("{0} = binReader.ReadUInt16();", ArrayLenName(param.Name)));
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("{1} = new {0}[{2}];", typeInfo.CSharpTypeName, param.Name, ArrayLenName(param.Name)));

                            //if (csType == typeof(byte))
                            if (typeInfo.CSharpTypeName == typeof(byte).ToString())
                            {
                                MatchIndent(); OutStream.WriteLine("binReader.ReadBytes({0});", param.Name);
                            }
                            else
                            {
                                MatchIndent(); OutStream.WriteLine(
                                    string.Format("for( int iElement = 0; iElement < {0}; iElement++) {{", ArrayLenName(param.Name)));
                                MatchIndent(); OutStream.WriteLine(
                                    string.Format("{1}[iElement] = binReader.Read{0}();", CSharpTypeString(typeInfo.CSharpTypeName), param.Name, ArrayLenName(param.Name)));
                                MatchIndent(); OutStream.WriteLine("}");
                            }
                        }
                        else
                        {
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("{1} = binReader.Read{0}();", CSharpTypeString(typeInfo.CSharpTypeName), param.Name, ArrayLenName(param.Name)));
                        }
                        break;
                    }
                    NewLine();
                }
            }

            CloseSection();
        }
Exemple #24
0
        // build message class
        void BuildMessageClass(MessageBase baseMsg, string typeName, Parameter[] parameters)
        {
            string Name         = baseMsg.Name;
            string strClassName = MsgClassName(Name, typeName);

            MatchIndent(); OutStream.WriteLine("[Preserve (AllMembers = true)]");
            OpenSection("public class", strClassName + " : MessageBase", false);

            NewLine();
            MatchIndent(); OutStream.WriteLine("public static MessageID MID = new MessageID(MSGTYPE.{0}, {1}, {2}, POLICY.{3}, {4});",
                                               typeName.ToUpper(), baseMsg.Reliable.ToString().ToLower(), Group.IsMobile.ToString().ToLower(), Group.Name.ToUpper(), MessageCodeIndex);
            NewLine();

            // member section
            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    switch (param.TypeName)
                    {
                    case "String":
                        MatchIndent(); OutStream.WriteLine(string.Format("public string {0} {{ get; private set; }}", param.Name));
                        break;

                    default:
                        //Type csType = SystemTypeInfo.ToCSharpType(param.Type);
                        var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                        if (param.IsArray)
                        {
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("public {0}[] {1};", typeInfo.CSharpTypeName, param.Name));
                        }
                        else
                        {
                            MatchIndent(); OutStream.WriteLine(
                                string.Format("public {0} {1};", typeInfo.CSharpTypeName, param.Name));
                        }
                        break;
                    }
                }
            }

            // Constructor
            MatchIndent(); OutStream.WriteLine("public " + strClassName + "()");
            MatchIndent(1); OutStream.WriteLine("{}");
            NewLine();

            MatchIndent(); OutStream.WriteLine("public " + strClassName + "( ref MessageHeader msgHeader )");
            MatchIndent(1); OutStream.WriteLine(":base(ref msgHeader)");
            MatchIndent(1); OutStream.WriteLine("{}");
            NewLine();

            NewLine();
            // message trace function
            BuildMessageTrace(Name, typeName, baseMsg.Trace.ToString(), parameters);
            NewLine();

            // Parse function
            BuildMessageClassParserImpl(baseMsg.Name, typeName, parameters); NewLine();
            NewLine();

            // Build function
            BuildBuilderSelfImpl(parameters);
            NewLine();

            BuildBuilderImpl(parameters);
            NewLine();

            CloseSection();
        }
Exemple #25
0
        // Builder parameter string
        public string CallCreateNativeParameterString(TypeUsage from, string strPrefix, Parameter[] parameter)
        {
            TypeUsage     to        = ParameterMode;
            StringBuilder strParams = new StringBuilder(512);
            string        strComma  = ",";

            if (parameter == null)
            {
                return(strParams.ToString());
            }

            foreach (Parameter param in parameter)
            {
                strParams.Append(strComma);

                string paramElementTypeName = SystemTypeInfo.ElementTypeNameFor(from, param);
                string paramTypeNameOnly    = SystemTypeInfo.TypeNameOnlyFor(from, param);
                string paramTypeFrom        = SystemTypeInfo.TypeNameFor(from, param);
                string paramTypeTo          = SystemTypeInfo.TypeNameFor(to, param);
                bool   paramTypeEquality    = paramTypeFrom == paramTypeTo;
                var    typeInfo             = SystemTypeInfo.GetParameterInfo(param);

                bool bIsStruct = typeInfo.IsCSharpStruct;

                if (param.IsArray)        // array
                {
                    if (IsStrType(param)) // string type
                    {
                        strParams.AppendFormat("{0}{1}Array_", strPrefix, InParamName(param.Name));
                    }
                    else
                    {
                        strParams.AppendFormat("SF::ArrayView<{2}>({0}_sizeOf{1}, {0}_sizeOf{1}, const_cast<{3}>({0}{1}))", strPrefix, InParamName(param.Name), paramElementTypeName, paramTypeNameOnly);
                    }
                }
                else if (IsStrType(param)) // string type
                {
                    strParams.AppendFormat("{0}{1}", strPrefix, InParamName(param.Name));
                }
                else if (IsVariableSizeType(param))
                {
                    strParams.AppendFormat("SF::ArrayView<uint8_t>({0}_sizeOf{1}, {0}_sizeOf{1}, {0}{1})", strPrefix, InParamName(param.Name), paramElementTypeName, paramTypeNameOnly);
                }
                else // generic type
                {
                    if (bIsStruct)
                    {
                        strParams.AppendFormat("{0}{1}", strPrefix, InParamName(param.Name));
                    }
                    else
                    {
                        if (paramTypeEquality)
                        {
                            strParams.AppendFormat(" {0}{1}", strPrefix, InParamName(param.Name));
                        }
                        else
                        {
                            strParams.AppendFormat("({2}) {0}{1}", strPrefix, InParamName(param.Name), paramTypeTo);
                        }
                    }
                }
            }

            return(strParams.ToString());
        }
Exemple #26
0
        public virtual bool IsVariableSizeType(Parameter param)
        {
            var typeInfo = SystemTypeInfo.GetParameterInfo(param);

            return(typeInfo.IsVariableSize);
        }
Exemple #27
0
        // Build parser class implementation
        void BuildParserToVariableBuilderImpl(string Name, string typeName, Parameter[] parameters)
        {
            if (!AppConfig.GetValue("VariableMapParser", false))
            {
                return;
            }

            string strClassName = MsgClassName(Name, typeName);

            OpenSection("Result", strClassName + "::ParseMessageTo(const MessageDataPtr& pIMsg, IVariableMapBuilder& variableBuilder )");

            DefaultHRESULT(); NewLine();

            bool bHasParameter = parameters != null && parameters.Length > 0;

            NewLine();
            MatchIndent(); OutStream.WriteLine("{0} parser;", strClassName);
            MatchIndent(); OutStream.WriteLine("protocolCheck(parser.ParseMessage(*pIMsg));");
            NewLine();

            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    //var csharpType = SystemTypeInfo.ToCSharpType(param);
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);

                    if (typeInfo.UseGenericVariableBuilderInterface)
                    {
                        if (param.IsArray)
                        {
                            MatchIndent(); OutStream.WriteLine("variableBuilder.SetVariableArray(\"{0}\", \"{1}\", parser.Get{0}());", param.Name, param.TypeName);
                        }
                        else
                        {
                            MatchIndent(); OutStream.WriteLine("variableBuilder.SetVariable(\"{0}\", \"{1}\", parser.Get{0}());", param.Name, param.TypeName);
                        }
                    }
                    else if (param.IsArray || typeInfo.IsString)
                    {
                        MatchIndent(); OutStream.WriteLine("variableBuilder.SetVariable(\"{0}\", parser.Get{0}());", param.Name);
                    }
                    else if (typeInfo.IsEnum)
                    {
                        MatchIndent(); OutStream.WriteLine("variableBuilder.SetVariable(\"{0}\", (int)parser.Get{0}());", param.Name);
                    }
                    else if (!typeInfo.IsCSharpStruct && typeInfo.IsVariableSize)
                    {
                        MatchIndent(); OutStream.WriteLine("variableBuilder.SetVariableArray(\"{0}\", \"{1}\", parser.Get{0}Raw());", param.Name, param.TypeName);
                    }
                    else
                    {
                        MatchIndent();
                        var isStruct = SystemTypeInfo.IsStruct(param);
                        if (isStruct)
                        {
                            OutStream.WriteLine("variableBuilder.SetVariable(\"{0}\", \"{1}\", parser.Get{0}());", param.Name, param.TypeName);
                        }
                        else
                        {
                            OutStream.WriteLine("variableBuilder.SetVariable(\"{0}\", parser.Get{0}());", param.Name);
                        }
                    }
                }
            }

            NewLine();

            ReturnHR(); NewLine();

            CloseSection();
        }
Exemple #28
0
        // build parser class
        void BuildParserClass(ProtocolXml.MessageBase msg, MsgType msgType, string typeName, Parameter[] parameters)
        {
            string Name         = msg.Name;
            string strClassName = MsgClassName(Name, typeName);

            OpenSection("class", strClassName + " : public MessageBase");
            MatchIndent(-1); OutStream.WriteLine("public:");

            MatchIndent(); OutStream.WriteLine("static const MessageID MID;");

            // Generate parameter Indicators for Template implementations
            MatchIndent(); OutStream.WriteLine("// Parameter type informations for template");
            var parameterNameMap = new Dictionary <string, Parameter>();

            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    parameterNameMap.Add(param.Name, param);
                }
            }

            OpenSection("enum", "ParameterTypeInfo");
            foreach (var parameterName in GenerateParameterTypeInfoList)
            {
                MatchIndent(); OutStream.WriteLine("Has{0} = {1},", parameterName.Name, parameterNameMap.ContainsKey(parameterName.Name) ? 1 : 0);
            }
            CloseSection();

            // Add fake access functions
            MatchIndent(-1); OutStream.WriteLine("public:");
            foreach (var parameter in GenerateParameterTypeInfoList)
            {
                if (parameterNameMap.ContainsKey(parameter.Name))
                {
                    continue;
                }
                MatchIndent(); OutStream.WriteLine("{1} Get{0}() {{ return {1}{{}}; }}", parameter.Name, ToTargetTypeName(parameter));
            }

            bool bHasInternalTypeOverride = HasInternalTypeOverride(parameters);

            // Generate parameter variables
            MatchIndent(-1); OutStream.WriteLine("private:");
            // member section
            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);

                    if (param.IsArray)
                    {
                        MatchIndent();
                        if (typeInfo.IsVariableSize)
                        {
                            OutStream.WriteLine("DynamicArray<{0}> m_{1};", ToTargetTypeName(param), param.Name);
                        }
                        else
                        {
                            OutStream.WriteLine("ArrayView<{0}> m_{1};", ToTargetTypeName(param), param.Name);
                        }
                    }
                    else if (!typeInfo.IsString && !typeInfo.IsCSharpStruct && typeInfo.IsVariableSize)
                    {
                        MatchIndent(); OutStream.WriteLine("ArrayView<uint8_t> m_{1}Raw;", ToTargetTypeName(param), param.Name);
                        MatchIndent(); OutStream.WriteLine("mutable bool m_{1}HasParsed = false;", ToTargetTypeName(param), param.Name);
                        MatchIndent(); OutStream.WriteLine("mutable {0} m_{1};", ToTargetTypeName(param), param.Name);
                    }
                    else
                    {
                        MatchIndent(); OutStream.WriteLine("{0} m_{1}{{}};", ToTargetTypeName(param), param.Name);
                    }
                }
            }

            MatchIndent(-1); OutStream.WriteLine("public:");

            // Constructors
            MatchIndent(); OutStream.WriteLine(strClassName + "()");
            MatchIndent(1); OutStream.WriteLine("{}");
            NewLine();

            MatchIndent(); OutStream.WriteLine(strClassName + "( const MessageDataPtr &pMsg )");
            MatchIndent(1); OutStream.WriteLine(": MessageBase(pMsg)");
            MatchIndent(1); OutStream.WriteLine("{}");
            NewLine();

            // Usage
            MatchIndent(1); OutStream.WriteLine("MessageUsage GetMessageUsage() {{ return MessageUsage_{0}; }}", msg.Usage.ToString());
            NewLine();

            // Generate Get functions
            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);

                    if (param.IsArray)
                    {
                        MatchIndent(); OutStream.WriteLine("const Array<{0}>& Get{1}() const\t{{ return m_{1}; }};", ToTargetTypeName(param), param.Name);
                    }
                    else if (IsStrType(param))
                    {
                        MatchIndent(); OutStream.WriteLine("{0} Get{1}() const\t{{ return m_{1}; }};", ToTargetTypeName(param), param.Name);
                    }
                    else if (!typeInfo.IsCSharpStruct && typeInfo.IsVariableSize)
                    {
                        MatchIndent(); OutStream.WriteLine("const Array<uint8_t>& Get{1}Raw() const\t{{ return m_{1}Raw; }};", ToTargetTypeName(param), param.Name);
                        //MatchIndent(); OutStream.WriteLine("const {0}& Get{1}() const\t{{ return m_{1}; }};", ToTargetTypeName(param.Type), param.Name);
                        MatchIndent(); OutStream.WriteLine("const {0}& Get{1}() const;", ToTargetTypeName(param), param.Name);
                    }
                    else
                    {
                        MatchIndent(); OutStream.WriteLine("const {0}& Get{1}() const\t{{ return m_{1}; }};", ToTargetTypeName(param), param.Name);
                    }
                }
            }

            NewLine();
            // message trace function
            MatchIndent(); OutStream.WriteLine("static Result TraceOut(const char* prefix, const MessageDataPtr& pMsg);");
            NewLine();

            // Parse function
            MatchIndent(); OutStream.WriteLine("virtual Result ParseMessage(const MessageData* pIMsg);");
            if (AppConfig.GetValue("VariableMapParser", false))
            {
                MatchIndent(); OutStream.WriteLine("static Result ParseMessageTo(const MessageDataPtr& pIMsg, IVariableMapBuilder& variableBuilder );");
            }

            MatchIndent(); OutStream.WriteLine("static Result ParseMessageToMessageBase(IHeap& memHeap, const MessageDataPtr& pIMsg, MessageBase* &pMsgBase);");
            NewLine();

            // Build function
            MatchIndent(); OutStream.WriteLine("static MessageData* Create( {0} );", BuilderParamString(parameters));
            if (bHasInternalTypeOverride)
            {
                MatchIndent(); OutStream.WriteLine("static MessageData* Create( {0} );", BuilderParamString(parameters, bUseOriginalType: true));
            }
            NewLine();

            // Override route context function
            //if (Group.GenParameterRouteContext)
            //{
            //    MatchIndent(); OutStream.WriteLine("Result OverrideRouteContextDestination( EntityUID to );");
            //    NewLine();
            //}

            // Override route hop function
            //if (Group.GenParameterRouteHopCount)
            //{
            //    MatchIndent(); OutStream.WriteLine("Result OverrideRouteInformation( EntityUID to, unsigned hopCount );");
            //    NewLine();
            //}

            CloseSection();
        }
Exemple #29
0
        void BuildMessageTrace(string Name, string typeName, string traceChannel, Parameter[] parameters)
        {
            string strClassName = MsgClassName(Name, typeName);

            OpenSection("Result", strClassName + "::TraceOut(const char* prefix, const MessageDataPtr& pMsg)");

            string strTrace       = string.Format("{0}, \"{1}:{{0}}:{{1}} ", traceChannel, Name, typeName);
            string strTraceMember = "prefix, pMsg->GetMessageHeader()->Length";
            int    ParamCount     = 2;

            MatchIndent(); OutStream.WriteLine("{0} parser;", strClassName);
            MatchIndent(); OutStream.WriteLine("parser.ParseMessage(*pMsg);");

            if (parameters != null)
            {
                foreach (Parameter param in parameters)
                {
                    var typeInfo = SystemTypeInfo.GetParameterInfo(param);
                    //var csharpType = SystemTypeInfo.ToCSharpType(param.Type);

                    switch (param.TypeName)
                    {
                    case "String":
                    {
                        strTrace       += string.Format(", {0}:{{{1},60}}", param.Name, ParamCount++);
                        strTraceMember += string.Format(", parser.Get{0}()", param.Name);
                    } break;

                    default:
                        if (param.IsArray)
                        {
                            strTrace       += string.Format(", {0}:{{{1},30}}", param.Name, ParamCount++);
                            strTraceMember += string.Format(", parser.Get{0}()", param.Name);
                        }
                        else if (param.TypeName == "Result")
                        {
                            strTrace       += string.Format(", {0}:{{{1}:X8}}", param.Name, ParamCount++);
                            strTraceMember += string.Format(", parser.Get{0}()", param.Name);
                        }
                        else if (typeInfo.IsEnum)
                        {
                            strTrace       += string.Format(", {0}:{{{1}}}", param.Name, ParamCount++);
                            strTraceMember += string.Format(", (int)parser.Get{0}()", param.Name);
                        }
                        else
                        {
                            strTrace       += string.Format(", {0}:{{{1}}}", param.Name, ParamCount++);
                            strTraceMember += string.Format(", parser.Get{0}()", param.Name);
                        }
                        break;
                    }
                }
            }

            MatchIndent(); OutStream.WriteLine("{0} {1},", LogFunctionPrefix, strTrace + "\"");
            MatchIndent(1); OutStream.WriteLine("\t{0}); ", strTraceMember);

            MatchIndent(); OutStream.WriteLine("return ResultCode::SUCCESS;");

            CloseSection();

            NewLine();
        }
Exemple #30
0
        public bool IsStruct(Parameter param)
        {
            var typeInfo = SystemTypeInfo.GetParameterInfo(param);

            return(typeInfo.IsCSharpStruct);
        }