void IModuleManagerBase.Save(string regionName, out string logicalState, out string visualState)
        {
            if (!allowSaveRestoreLayout)
            {
                logicalState = null;
                visualState  = null;
                return;
            }
            var         regionsToSerialize = string.IsNullOrEmpty(regionName) ? new List <IRegionImplementation>(regions) : new List <IRegionImplementation>(new[] { GetRegion(regionName) });
            LogicalInfo logicalInfo        = new LogicalInfo();
            VisualInfo  visualInfo         = new VisualInfo();

            foreach (var region in regionsToSerialize)
            {
                RegionInfo       logicalRegionInfo;
                RegionVisualInfo visualRegionInfo;
                region.GetInfo(out logicalRegionInfo, out visualRegionInfo);
                if (logicalRegionInfo != null)
                {
                    logicalInfo.Regions.Add(logicalRegionInfo);
                }
                if (visualRegionInfo != null)
                {
                    visualInfo.Regions.Add(visualRegionInfo);
                }
            }
            logicalState = LogicalInfo.Serialize(logicalInfo);
            visualState  = VisualInfo.Serialize(visualInfo);
        }
コード例 #2
0
                public override Object next()
                {
                    VisualInfo visual_info = new VisualInfo(this, 0);

                    inc(8);
                    return(visual_info);
                }
コード例 #3
0
    public override IEnumerator AttackAnim()
    {
        Transform      shotArrow   = Instantiate(arrow, this.transform.position, Quaternion.identity).transform;
        List <Vector3> bezierNodes = new List <Vector3>()
        {
            this.transform.position, 0.5f * (this.transform.position + InputManager.playerGridCell.transform.position) + new Vector3(0, arrowBezHeight, 0), InputManager.playerGridCell.transform.position
        };

        float progress = 0;

        while (Vector3.Magnitude(shotArrow.position - InputManager.playerGridCell.transform.position) >= 0.01f)
        {
            progress += Time.deltaTime * arrowFlySpeed * (HexMetrics.innerRadius / (Vector3.Magnitude(this.transform.position - InputManager.playerGridCell.transform.position)));
            Vector3 nextPos = VisualInfo.GetBezierCurvePoint(bezierNodes, progress);
            shotArrow.position = nextPos;
            if (Vector3.SqrMagnitude(shotArrow.position - InputManager.playerGridCell.transform.position) <= 0.01f)
            {
                shotArrow.position = InputManager.playerGridCell.transform.position;
                Destroy(shotArrow.gameObject);
                EnemyManager.TryEndEnemyPhase();
                yield return(true);

                break;
            }
            else
            {
                InputManager.AllowInput = false;
            }

            yield return(null);
        }
        yield return(null);
    }
コード例 #4
0
                public override Object next()
                {
                    // blackdown JDK 1.1.8 fails to compile the following line
                    VisualInfo vi = new VisualInfo(owner.display, this, this.offset);

                    inc(16);
                    return(vi);
                }
コード例 #5
0
        public async Task <FileResult> Get([FromRoute] int siteId, [FromQuery] GetRequest request)
        {
            try
            {
                return(await GetResponseMessageAsync(await VisualInfo.GetInstanceAsync(_pathManager, _databaseManager, siteId, 0, 0, 0, request.PageIndex)));
            }
            catch (Exception ex)
            {
                HttpContext.Response.Redirect(_pathManager.GetAdminUrl(ErrorController.Route) + "/?message=" + HttpUtility.UrlPathEncode(ex.Message));
            }

            return(null);
        }
コード例 #6
0
 /// <summary>
 /// Setting Random grid
 /// </summary>
 private void SetRandomGrid()
 {
     for (int i = 0; i < currentGridSizeX; i++)
     {
         for (int j = 0; j < currentGridSizeY; j++)
         {
             previousGenGrid[i, j] = new VisualInfo();
             previousGenGrid[i, j].currentState = (e_StateType)UnityEngine.Random.Range(0, 2);
             previousGenGrid[i, j].visual       = GameObject.Instantiate(prefabToUse, new Vector3(i, j, 1f), Quaternion.identity);
             previousGenGrid[i, j].visual.transform.SetParent(gridParent.transform);
             previousGenGrid[i, j].visual.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f);
             previousGenGrid[i, j].SetColor();
         }
     }
 }
コード例 #7
0
        public void SerializeEmpty2()
        {
            string      logicalState = null;
            string      visualState  = null;
            LogicalInfo logicalInfo  = null;
            VisualInfo  visualInfo   = null;

            Manager.Register("R", new Module("1", () => new object()));

            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(0, logicalInfo.Regions.Count());
            Assert.AreEqual(0, visualInfo.Regions.Count());
        }
コード例 #8
0
    IEnumerator PlayerJump(GridCell gridCellToJumpTo)
    {
        Debug.Log("Jump");
        AllowInput              = false;
        jumpCoolDownLeft        = jumpCoolDown + 1;
        playerGridCell.Walkable = true;
        playerGridCell.entity   = null;
        playerGridCell          = gridCellToJumpTo;
        playerGridCell.entity   = this.transform;
        gridGen.ResetDijkstra(playerGridCell.arrayCoords.x, playerGridCell.arrayCoords.y, GridGen.grid[stage % 2].heightMap, GridGen.grid[stage % 2].gridCells);
        Vector3        startScale  = player.transform.localScale;
        float          progress    = 0;
        List <Vector3> bezierNodes = new List <Vector3>()
        {
            this.transform.position, 0.5f * (this.transform.position + InputManager.playerGridCell.transform.position) + new Vector3(0, playerJumpHeight, 0), InputManager.playerGridCell.transform.position
        };

        for (int i = 0; i < 6; i++)
        {
            if (playerGridCell.cellNeighbours[i] != null)
            {
                playerGridCell.cellNeighbours[i].ForcePush(i);                                          //kfuy
            }
        }

        while (Vector3.SqrMagnitude(player.transform.position - playerGridCell.transform.position) >= 0.01f)
        {
            progress += Time.deltaTime * playerMoveSpeed * 0.1f * (HexMetrics.innerRadius / (Vector3.Magnitude(this.transform.position - InputManager.playerGridCell.transform.position)));
            Vector3 nextPos = VisualInfo.GetBezierCurvePoint(bezierNodes, progress);
            player.transform.position   = nextPos;
            player.transform.localScale = Vector3.Lerp(startScale, startScale * playerJumpScale, 1 - Mathf.Abs(2 * progress - 1));
            if (progress >= 1)
            {
                player.transform.localScale = startScale;
                player.transform.position   = playerGridCell.transform.position;
                PlayerIsMoving = false;

                EndPlayerTurn();
                yield return(true);
            }
            else
            {
                PlayerIsMoving = true;
            }

            yield return(null);
        }
    }
コード例 #9
0
        public HttpResponseMessage GetFile(int siteId, int fileTemplateId)
        {
            try
            {
                var pageIndex = TranslateUtils.ToInt(HttpContext.Current.Request.QueryString["pageIndex"]);

                var response = GetResponseMessage(VisualInfo.GetInstance(siteId, 0, 0, fileTemplateId, pageIndex, 0));
                return(response ?? Request.CreateResponse(HttpStatusCode.NotFound));
            }
            catch (Exception ex)
            {
                LogUtils.AddErrorLogAndRedirect(ex);
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
コード例 #10
0
ファイル: SpriteDatabase.cs プロジェクト: scot140/SideProj
    //load information
    public bool Load(string _file)
    {
        if (0 == _file.Length)
        {
            return(false);
        }

        //create a reader and opne the file
        StreamReader ifs = new StreamReader(Application.dataPath + "/Resources/" + _file);

        //temporary string for reading values
        string line;

        string[] lineParse;
        char[]   delims = { '\n', '\r', '-', '\t' };

        //read the first line : ID
        line = ifs.ReadLine();
        //parse until EOF
        while (line != null)
        {
            //line data : ID
            lineParse = line.Split(delims);
            //confirm the size
            if (4 == lineParse.Length)
            {
                VisualInfo     visualData = new VisualInfo();
                CardIdentifier cardID     = new CardIdentifier(lineParse[0], lineParse[2], lineParse[1]);

                string spritePath   = SpriteFolderPath + cardID.FactionID + "/" + cardID.UniqueID;
                string animatorPath = AnimationControllerFolderPath + cardID.FactionID + "/" + cardID.UniqueID + "_0";

                //load visual information
                if (visualData.Load(spritePath, animatorPath))
                {
                    //add into database
                    spriteDatabase.AddEntry(cardID.ID, ref visualData);
                }
            }
            //read the next line
            line = ifs.ReadLine();
        }

        ifs.Close();

        return(true);
    }
コード例 #11
0
        public HttpResponseMessage GetChannel(int siteId, int channelId)
        {
            try
            {
                var pageIndex = TranslateUtils.ToInt(HttpContext.Current.Request.QueryString["pageIndex"]);

                var response = GetResponseMessage(VisualInfo.GetInstance(siteId, channelId, 0, 0, pageIndex, 0));
                return(response ?? Request.CreateResponse(HttpStatusCode.NotFound));
            }
            catch (Exception ex)
            {
                var logId = LogUtils.AddSystemErrorLog(ex);
                PageUtils.RedirectToErrorPage(logId);
            }

            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
コード例 #12
0
        public void SerializeEmpty()
        {
            string      logicalState = null;
            string      visualState  = null;
            LogicalInfo logicalInfo  = null;
            VisualInfo  visualInfo   = null;

            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(0, logicalInfo.Regions.Count());
            Assert.AreEqual(0, visualInfo.Regions.Count());

            Manager.Restore(null, null);
            Manager.Restore(string.Empty, string.Empty);
            Manager.Restore(logicalState, visualState);
        }
コード例 #13
0
            public CellInfo GetCellInfo(string DataPropertyName, VisualInfo VisualInfo)
            {
                switch (DataPropertyName)
                {
                case "Name":
                    return(new CellInfo(Path.GetFileName(path), null));

                case "Path":
                    return(new CellInfo(path, null));

                case "Attributes":
                    return(new CellInfo(new FileInfo(path).Attributes.ToString(), null));

                default:
                    return(new CellInfo(string.Empty, null));
                }
            }
コード例 #14
0
        private HttpResponseMessage GetResponseMessage(VisualInfo visualInfo)
        {
            if (visualInfo.SiteInfo == null || visualInfo.TemplateInfo == null)
            {
                return(null);
            }

            var siteInfo     = visualInfo.SiteInfo;
            var templateInfo = visualInfo.TemplateInfo;

            var pageInfo = new PageInfo(visualInfo.ChannelId, visualInfo.ContentId, siteInfo, templateInfo, new Dictionary <string, object>())
            {
                IsLocal = true
            };
            var contextInfo = new ContextInfo(pageInfo)
            {
                ContextType = visualInfo.ContextType
            };

            var contentBuilder = new StringBuilder(TemplateManager.GetTemplateContent(siteInfo, templateInfo));

            if (templateInfo.CreatedFileExtName == ".shtml")
            {
                //<!-- #include virtual="{Stl.SiteUrl}/include/head.html" -->

                var content = Regex.Replace(contentBuilder.ToString(), @"<!-- #include virtual=""([^""]+)"" -->", @"<stl:include file=""$1""></stl:include>");
                contentBuilder = new StringBuilder(content);
            }
            HttpResponseMessage message = null;

            if (templateInfo.TemplateType == TemplateType.FileTemplate)           //单页
            {
                message = GetFileTemplate(visualInfo, pageInfo, contextInfo, contentBuilder, siteInfo);
            }
            else if (templateInfo.TemplateType == TemplateType.IndexPageTemplate || templateInfo.TemplateType == TemplateType.ChannelTemplate)        //栏目页面
            {
                message = GetChannelTemplate(visualInfo, siteInfo, contentBuilder, pageInfo, contextInfo);
            }
            else if (templateInfo.TemplateType == TemplateType.ContentTemplate)        //内容页面
            {
                message = GetContentTemplate(visualInfo, contextInfo, contentBuilder, pageInfo, siteInfo);
            }

            return(message);
        }
コード例 #15
0
ファイル: DuelCard.cs プロジェクト: scot140/SideProj
    public bool Summon()
    {
        //temporary: set the card information
        VisualInfo info = spriteDatabase.Get(cardID);

        if (null == info)
        {
            return(false);
        }

        fieldCard.SetVisuals(ref info);

        //turn on field visual items
        uiCard.SetActive(false);
        fieldCard.SetActive(true);

        return(true);
    }
        bool IModuleManagerBase.Restore(string logicalState, string visualState)
        {
            if (!allowSaveRestoreLayout)
            {
                return(false);
            }
            VisualInfo  visualInfo             = VisualInfo.Deserialize(visualState);
            LogicalInfo logicalInfo            = LogicalInfo.Deserialize(logicalState);
            var         regionsFromLogicalInfo = logicalInfo != null?logicalInfo.Regions.Select(x => x.RegionName) : new string[]
            {
            };
            var regionsFromVisualInfo = visualInfo != null?visualInfo.Regions.Select(x => x.RegionName) : new string[]
            {
            };
            var regionNames = regionsFromLogicalInfo.Union(regionsFromVisualInfo);
            var regions     = regionNames.Select(x => GetRegion(x)).ToList();

            Func <LogicalInfo, string, RegionInfo> getRegionInfo = (info, regionName) =>
                                                                   info != null?info.Regions.FirstOrDefault(x => x.RegionName == regionName) : null;

            Func <VisualInfo, string, RegionVisualInfo> getRegionVisualInfo = (info, regionName) =>
                                                                              info != null?info.Regions.FirstOrDefault(x => x.RegionName == regionName) : null;

            regions.ForEach(region => {
                if (region.LogicalSerializationMode == LogicalSerializationMode.Disabled)
                {
                    return;
                }
                if (getRegionInfo(logicalInfo, region.RegionName) != null)
                {
                    ((IModuleManager)this).Clear(region.RegionName);
                }
            });
            regions.ForEach(region => region.SetInfo(
                                getRegionInfo(logicalInfo, region.RegionName),
                                getRegionVisualInfo(visualInfo, region.RegionName)));
            if (logicalInfo != null)
            {
                regions.ForEach(x => x.ApplyInfo(true, false));
                regions.ForEach(x => x.ApplyInfo(false, true));
            }
            return(logicalInfo != null);
        }
コード例 #17
0
        private async Task <FileResult> GetResponseMessageAsync(VisualInfo visualInfo)
        {
            if (visualInfo.Site == null || visualInfo.Template == null)
            {
                return(null);
            }

            var site         = visualInfo.Site;
            var templateInfo = visualInfo.Template;

            await _parseManager.InitAsync(EditMode.Preview, site, visualInfo.ChannelId, visualInfo.ContentId, templateInfo);

            _parseManager.PageInfo.IsLocal        = true;
            _parseManager.ContextInfo.ContextType = visualInfo.ContextType;

            var contentBuilder = new StringBuilder(await _pathManager.GetTemplateContentAsync(site, templateInfo));

            if (templateInfo.CreatedFileExtName == ".shtml")
            {
                //<!-- #include virtual="{Stl.SiteUrl}/include/head.html" -->

                var content = Regex.Replace(contentBuilder.ToString(), @"<!-- #include virtual=""([^""]+)"" -->", @"<stl:include file=""$1""></stl:include>");
                contentBuilder = new StringBuilder(content);
            }
            FileResult message = null;

            if (templateInfo.TemplateType == TemplateType.FileTemplate)           //单页
            {
                message = await GetFileTemplateAsync(visualInfo, contentBuilder);
            }
            else if (templateInfo.TemplateType == TemplateType.IndexPageTemplate || templateInfo.TemplateType == TemplateType.ChannelTemplate)        //栏目页面
            {
                message = await GetChannelTemplateAsync(visualInfo, contentBuilder);
            }
            else if (templateInfo.TemplateType == TemplateType.ContentTemplate)        //内容页面
            {
                message = await GetContentTemplateAsync(visualInfo, contentBuilder);
            }

            return(message);
        }
コード例 #18
0
        public void SerializeEmpty3()
        {
            string      logicalState = null;
            string      visualState  = null;
            LogicalInfo logicalInfo  = null;
            VisualInfo  visualInfo   = null;

            Manager.Register("R", new Module("1", () => new object()));
            Manager.Inject("R", "1");

            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(1, logicalInfo.Regions.Count());
            Assert.AreEqual(1, visualInfo.Regions.Count());
            Assert.AreEqual(0, visualInfo.Regions[0].Items.Count);

            Assert.AreEqual("R", logicalInfo.Regions[0].RegionName);
            Assert.AreEqual(null, logicalInfo.Regions[0].SelectedViewModelKey);
            Assert.AreEqual(0, logicalInfo.Regions[0].Items.Count);
        }
コード例 #19
0
        public void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var visualInfo = VisualInfo.GetInstance();

                var publishmentSystemInfo = PublishmentSystemManager.GetPublishmentSystemInfo(visualInfo.PublishmentSystemID);

                var templateInfo = TemplateManager.GetTemplateInfo(visualInfo.PublishmentSystemID, visualInfo.ChannelID, visualInfo.TemplateType);
                if (templateInfo == null)
                {
                    templateInfo = TemplateManager.GetTemplateInfo(visualInfo.PublishmentSystemID, visualInfo.FileTemplateID);
                }

                var pageInfo    = new PageInfo(visualInfo.ChannelID, visualInfo.ContentID, publishmentSystemInfo, templateInfo, null);
                var contextInfo = new ContextInfo(pageInfo);

                StringBuilder contentBuilder = null;
                contentBuilder = new StringBuilder(StlCacheManager.FileContent.GetTemplateContent(publishmentSystemInfo, templateInfo));
                //需要完善,考虑单页模板、内容正文、翻页及外部链接

                if (visualInfo.TemplateType == ETemplateType.IndexPageTemplate)             //首页
                {
                    WriteResponse(contentBuilder, publishmentSystemInfo, pageInfo, contextInfo, visualInfo);
                    return;
                }
                else if (visualInfo.TemplateType == ETemplateType.FileTemplate)           //单页
                {
                    var fileTemplateInfo   = TemplateManager.GetTemplateInfo(visualInfo.PublishmentSystemID, visualInfo.FileTemplateID);
                    var filePageInfo       = new PageInfo(visualInfo.ChannelID, visualInfo.ContentID, publishmentSystemInfo, fileTemplateInfo, null);
                    var fileContentBuilder = new StringBuilder(StlCacheManager.FileContent.GetTemplateContent(publishmentSystemInfo, fileTemplateInfo));
                    WriteResponse(fileContentBuilder, publishmentSystemInfo, filePageInfo, contextInfo, visualInfo);
                    return;
                }
                else if (visualInfo.TemplateType == ETemplateType.ChannelTemplate)        //栏目页面
                {
                    var nodeInfo = NodeManager.GetNodeInfo(visualInfo.PublishmentSystemID, visualInfo.ChannelID);
                    if (nodeInfo == null)
                    {
                        return;
                    }

                    if (nodeInfo.NodeType != ENodeType.BackgroundPublishNode)
                    {
                        if (!string.IsNullOrEmpty(nodeInfo.LinkUrl))
                        {
                            Response.Redirect(nodeInfo.LinkUrl);
                            return;
                        }
                    }

                    var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString());

                    //如果标签中存在Content
                    var stlContentElement = string.Empty;

                    foreach (var label in stlLabelList)
                    {
                        if (StlParserUtility.IsStlChannelElement(label, NodeAttribute.PageContent))
                        {
                            stlContentElement = label;
                            break;
                        }
                    }

                    if (!string.IsNullOrEmpty(stlContentElement))//内容存在
                    {
                        var innerBuilder = new StringBuilder(stlContentElement);
                        StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo);
                        var contentAttributeHtml = innerBuilder.ToString();
                        var pageCount            = StringUtils.GetCount(ContentUtility.PagePlaceHolder, contentAttributeHtml) + 1;//一共需要的页数
                        if (pageCount > 1)
                        {
                            for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                            {
                                var thePageInfo = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var index       = contentAttributeHtml.IndexOf(ContentUtility.PagePlaceHolder);
                                var length      = (index == -1) ? contentAttributeHtml.Length : index;

                                if (currentPageIndex == visualInfo.PageIndex)
                                {
                                    var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length);
                                    var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlContentElement, pagedContentAttributeHtml));
                                    StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageNodeId, currentPageIndex, pageCount, 0);

                                    WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                    return;
                                }

                                if (index != -1)
                                {
                                    contentAttributeHtml = contentAttributeHtml.Substring(length + ContentUtility.PagePlaceHolder.Length);
                                }
                            }
                            return;
                        }
                        contentBuilder.Replace(stlContentElement, contentAttributeHtml);
                    }

                    if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList))//如果标签中存在<stl:pageContents>
                    {
                        var stlElement             = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList);
                        var stlPageContentsElement = stlElement;
                        var stlPageContentsElementReplaceString = stlElement;

                        var pageContentsElementParser = new StlPageContents(stlPageContentsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageContentsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageContentsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageNodeId, currentPageIndex, pageCount, totalNum);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlLabelList))//如果标签中存在<stl:pageChannels>
                    {
                        var stlElement             = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                        var stlPageChannelsElement = stlElement;
                        var stlPageChannelsElementReplaceString = stlElement;

                        var pageChannelsElementParser = new StlPageChannels(stlPageChannelsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageChannelsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageChannelsElementParser.Parse(currentPageIndex, pageCount);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageChannelsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageNodeId, currentPageIndex, pageCount, totalNum);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList))//如果标签中存在<stl:pageSqlContents>
                    {
                        var stlElement = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                        var stlPageSqlContentsElement = stlElement;
                        var stlPageSqlContentsElementReplaceString = stlElement;

                        var pageSqlContentsElementParser = new StlPageSqlContents(stlPageSqlContentsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageSqlContentsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageSqlContentsElementParser.Parse(currentPageIndex, pageCount);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageSqlContentsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageNodeId, currentPageIndex, pageCount, totalNum);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else
                    {
                        WriteResponse(contentBuilder, publishmentSystemInfo, pageInfo, contextInfo, visualInfo);
                        return;
                    }
                }
                else if (visualInfo.TemplateType == ETemplateType.ContentTemplate)        //内容页面
                {
                    if (contextInfo.ContentInfo == null)
                    {
                        return;
                    }

                    if (!string.IsNullOrEmpty(contextInfo.ContentInfo.GetExtendedAttribute(BackgroundContentAttribute.LinkUrl)))
                    {
                        Response.Redirect(contextInfo.ContentInfo.GetExtendedAttribute(BackgroundContentAttribute.LinkUrl));
                        return;
                    }

                    var filePath = PathUtility.GetContentPageFilePath(publishmentSystemInfo, pageInfo.PageNodeId, pageInfo.PageContentId, 0);

                    var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString());

                    //如果标签中存在Content
                    var stlContentElement = string.Empty;

                    foreach (var label in stlLabelList)
                    {
                        if (StlParserUtility.IsStlContentElement(label, BackgroundContentAttribute.PageContent))
                        {
                            stlContentElement = label;
                            break;
                        }
                    }

                    if (!string.IsNullOrEmpty(stlContentElement))//内容存在
                    {
                        var innerBuilder = new StringBuilder(stlContentElement);
                        StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo);
                        var contentAttributeHtml = innerBuilder.ToString();
                        var pageCount            = StringUtils.GetCount(ContentUtility.PagePlaceHolder, contentAttributeHtml) + 1;//一共需要的页数
                        if (pageCount > 1)
                        {
                            for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                            {
                                var index  = contentAttributeHtml.IndexOf(ContentUtility.PagePlaceHolder);
                                var length = (index == -1) ? contentAttributeHtml.Length : index;

                                if (currentPageIndex == visualInfo.PageIndex)
                                {
                                    var thePageInfo = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                    var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length);
                                    var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlContentElement, pagedContentAttributeHtml));
                                    StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelID, visualInfo.ContentID, currentPageIndex, pageCount);

                                    WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                    return;
                                }

                                if (index != -1)
                                {
                                    contentAttributeHtml = contentAttributeHtml.Substring(length + ContentUtility.PagePlaceHolder.Length);
                                }
                            }
                            return;
                        }
                        contentBuilder.Replace(stlContentElement, contentAttributeHtml);
                    }

                    if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList))//如果标签中存在<stl:pageContents>
                    {
                        var stlElement             = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList);
                        var stlPageContentsElement = stlElement;
                        var stlPageContentsElementReplaceString = stlElement;

                        var pageContentsElementParser = new StlPageContents(stlPageContentsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageContentsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageContentsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelID, visualInfo.ContentID, currentPageIndex, pageCount);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlLabelList))//如果标签中存在<stl:pageChannels>
                    {
                        var stlElement             = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                        var stlPageChannelsElement = stlElement;
                        var stlPageChannelsElementReplaceString = stlElement;

                        var pageChannelsElementParser = new StlPageChannels(stlPageChannelsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageChannelsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageChannelsElementParser.Parse(currentPageIndex, pageCount);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageChannelsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelID, visualInfo.ContentID, currentPageIndex, pageCount);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList))//如果标签中存在<stl:pageSqlContents>
                    {
                        var stlElement = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                        var stlPageSqlContentsElement = stlElement;
                        var stlPageSqlContentsElementReplaceString = stlElement;

                        var pageSqlContentsElementParser = new StlPageSqlContents(stlPageSqlContentsElement, pageInfo, contextInfo, false);
                        var totalNum  = 0;
                        var pageCount = pageSqlContentsElementParser.GetPageCount(out totalNum);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var thePageInfo  = new PageInfo(pageInfo.PageNodeId, pageInfo.PageContentId, pageInfo.PublishmentSystemInfo, pageInfo.TemplateInfo, null);
                                var pageHtml     = pageSqlContentsElementParser.Parse(currentPageIndex, pageCount);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageSqlContentsElementReplaceString, pageHtml));

                                StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelID, visualInfo.ContentID, currentPageIndex, pageCount);

                                WriteResponse(pagedBuilder, publishmentSystemInfo, thePageInfo, contextInfo, visualInfo);
                                return;
                            }
                        }
                    }
                    else//无翻页
                    {
                        WriteResponse(contentBuilder, publishmentSystemInfo, pageInfo, contextInfo, visualInfo);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
コード例 #20
0
ファイル: EVI.cs プロジェクト: jbnivoit/projects
 public override Object next()
 {
     // blackdown JDK 1.1.8 fails to compile the following line
       VisualInfo vi = new VisualInfo (owner.display, this, this.offset);
       inc (16);
       return vi;
 }
コード例 #21
0
ファイル: DBE.cs プロジェクト: jbnivoit/projects
 public override Object next()
 {
     VisualInfo visual_info = new VisualInfo (this, 0);
       inc (8);
       return visual_info;
 }
コード例 #22
0
        public void SerializeState()
        {
            string      logicalState = null;
            string      visualState  = null;
            LogicalInfo logicalInfo  = null;
            VisualInfo  visualInfo   = null;

            Manager.Register("R", new Module("1", () => new VMTest()));
            Manager.Register("R", new Module("2", () => new VMTest()
            {
                Value = "Test"
            }, ViewLocator.Default.GetViewTypeName(typeof(View1_BaseTests))));
            Manager.Register("R", new Module("3", () => ViewModelSource.Create(() => new VMTest()), typeof(View1_BaseTests)));
            Manager.Register("R", new Module("4", () => ViewModelSource.Create(() => new VMTest()
            {
                Value = "Test"
            })));
            Manager.Inject("R", "1");
            Manager.Inject("R", "2");
            Manager.Inject("R", "3");
            Manager.Inject("R", "4");
            ContentControl c = new ContentControl();

            UIRegion.SetRegion(c, "R");
            Window.Content = c;
            Window.Show();

            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(1, logicalInfo.Regions.Count());
            Assert.AreEqual(0, visualInfo.Regions[0].Items.Count());
            Assert.AreEqual("1", logicalInfo.Regions[0].SelectedViewModelKey);
            Func <int, RegionItemInfo> getItem = x => logicalInfo.Regions[0].Items[x];

            Assert.AreEqual("1", getItem(0).Key);
            Assert.AreEqual(null, getItem(0).ViewName);
            Assert.AreEqual(typeof(VMTest).FullName, getItem(0).ViewModelName);
            Assert.AreEqual(typeof(VMTest).AssemblyQualifiedName, getItem(0).ViewModelStateType);
            var vmState = (VMTest)StateSerializer.Default.DeserializeState(getItem(0).ViewModelState.State, Type.GetType(getItem(0).ViewModelStateType));

            Assert.AreEqual(null, vmState.Value);

            Assert.AreEqual("2", getItem(1).Key);
            Assert.AreEqual(typeof(View1_BaseTests).FullName, getItem(1).ViewName);
            Assert.AreEqual(typeof(VMTest).FullName, getItem(1).ViewModelName);
            Assert.AreEqual(typeof(VMTest).AssemblyQualifiedName, getItem(1).ViewModelStateType);
            vmState = (VMTest)StateSerializer.Default.DeserializeState(getItem(1).ViewModelState.State, Type.GetType(getItem(1).ViewModelStateType));
            Assert.AreEqual("Test", vmState.Value);

            Assert.AreEqual("3", getItem(2).Key);
            Assert.AreEqual(typeof(View1_BaseTests).FullName, getItem(2).ViewName);
            Assert.AreEqual("IsPOCOViewModel=True;" + typeof(VMTest).FullName, getItem(2).ViewModelName);
            Assert.AreNotEqual(typeof(VMTest).AssemblyQualifiedName, getItem(2).ViewModelStateType);
            Assert.AreEqual(ViewModelSource.Create(() => new VMTest()).GetType().AssemblyQualifiedName, getItem(2).ViewModelStateType);
            vmState = (VMTest)StateSerializer.Default.DeserializeState(getItem(2).ViewModelState.State, ViewModelSource.Create(() => new VMTest()).GetType());
            Assert.AreEqual(null, vmState.Value);

            Assert.AreEqual("4", getItem(3).Key);
            Assert.AreEqual(null, getItem(3).ViewName);
            Assert.AreEqual("IsPOCOViewModel=True;" + typeof(VMTest).FullName, getItem(3).ViewModelName);
            Assert.AreNotEqual(typeof(VMTest).AssemblyQualifiedName, getItem(3).ViewModelStateType);
            Assert.AreEqual(ViewModelSource.Create(() => new VMTest()).GetType().AssemblyQualifiedName, getItem(3).ViewModelStateType);
            vmState = (VMTest)StateSerializer.Default.DeserializeState(getItem(3).ViewModelState.State, ViewModelSource.Create(() => new VMTest()).GetType());
            Assert.AreEqual("Test", vmState.Value);
        }
コード例 #23
0
        public void DisableEnable()
        {
            ContentControl c1 = new ContentControl();
            ContentControl c2 = new ContentControl();

            UIRegion.SetRegion(c1, "R1");
            UIRegion.SetRegion(c2, "R2");
            Manager.Register("R1", new Module("1", () => new VMTest()));
            Manager.Register("R1", new Module("2", () => new VMTest()));
            Manager.Register("R2", new Module("1", () => new VMTest()));
            Manager.Register("R2", new Module("2", () => new VMTest()));
            Manager.Inject("R1", "1");
            Manager.Inject("R1", "2");
            Manager.Inject("R2", "1");
            Manager.Inject("R2", "2");

            string logicalState = null;
            string visualState  = null;

            Manager.Save(out logicalState, out visualState);
            var logicalInfo = LogicalInfo.Deserialize(logicalState);
            var visualInfo  = VisualInfo.Deserialize(visualState);

            Assert.AreEqual(2, logicalInfo.Regions.Count());
            Assert.AreEqual("R1", logicalInfo.Regions[0].RegionName);
            Assert.AreEqual("R2", logicalInfo.Regions[1].RegionName);
            Assert.AreEqual(2, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());

            Manager.GetRegion("R1").LogicalSerializationMode = LogicalSerializationMode.Disabled;
            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(2, logicalInfo.Regions.Count());
            Assert.AreEqual("R1", logicalInfo.Regions[0].RegionName);
            Assert.AreEqual("R2", logicalInfo.Regions[1].RegionName);
            Assert.AreEqual(0, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());

            Manager.GetRegion("R1").LogicalSerializationMode = LogicalSerializationMode.Enabled;
            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(2, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());

            Manager.GetRegion("R1").SetLogicalSerializationMode("1", LogicalSerializationMode.Disabled);
            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(1, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual("2", logicalInfo.Regions[0].Items[0].Key);
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());

            Manager.GetRegion("R1").LogicalSerializationMode = LogicalSerializationMode.Disabled;
            Manager.GetRegion("R1").SetLogicalSerializationMode("2", LogicalSerializationMode.Enabled);
            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(1, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual("2", logicalInfo.Regions[0].Items[0].Key);
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());

            Manager.GetRegion("R1").SetLogicalSerializationMode("1", null);
            Manager.GetRegion("R1").SetLogicalSerializationMode("2", null);
            Manager.Save(out logicalState, out visualState);
            logicalInfo = LogicalInfo.Deserialize(logicalState);
            visualInfo  = VisualInfo.Deserialize(visualState);
            Assert.AreEqual(0, logicalInfo.Regions[0].Items.Count());
            Assert.AreEqual(2, logicalInfo.Regions[1].Items.Count());
        }
コード例 #24
0
        private HttpResponseMessage GetResponseMessage(VisualInfo visualInfo)
        {
            if (visualInfo.SiteInfo == null || visualInfo.TemplateInfo == null)
            {
                return(null);
            }

            var siteInfo     = visualInfo.SiteInfo;
            var templateInfo = visualInfo.TemplateInfo;

            var pageInfo = new PageInfo(visualInfo.ChannelId, visualInfo.ContentId, siteInfo, templateInfo, new Dictionary <string, object>())
            {
                IsLocal = true
            };
            var contextInfo = new ContextInfo(pageInfo)
            {
                ContextType = visualInfo.ContextType
            };

            var contentBuilder = new StringBuilder(TemplateManager.GetTemplateContent(siteInfo, templateInfo));

            //需要完善,考虑单页模板、内容正文、翻页及外部链接

            if (templateInfo.TemplateType == TemplateType.FileTemplate)           //单页
            {
                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);
                return(Response(contentBuilder.ToString(), siteInfo));
            }
            if (templateInfo.TemplateType == TemplateType.IndexPageTemplate || templateInfo.TemplateType == TemplateType.ChannelTemplate)        //栏目页面
            {
                var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, visualInfo.ChannelId);
                if (nodeInfo == null)
                {
                    return(null);
                }

                if (nodeInfo.ParentId > 0)
                {
                    if (!string.IsNullOrEmpty(nodeInfo.LinkUrl))
                    {
                        PageUtils.Redirect(nodeInfo.LinkUrl);
                        return(null);
                    }
                }

                var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString());

                //如果标签中存在Content
                var stlContentElement = string.Empty;

                foreach (var label in stlLabelList)
                {
                    if (StlParserUtility.IsStlChannelElement(label, ChannelAttribute.PageContent))
                    {
                        stlContentElement = label;
                        break;
                    }
                }

                if (!string.IsNullOrEmpty(stlContentElement))//内容存在
                {
                    var innerBuilder = new StringBuilder(stlContentElement);
                    StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo);
                    var contentAttributeHtml = innerBuilder.ToString();
                    var pageCount            = StringUtils.GetCount(ContentUtility.PagePlaceHolder, contentAttributeHtml) + 1;//一共需要的页数
                    if (pageCount > 1)
                    {
                        Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                        for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var index  = contentAttributeHtml.IndexOf(ContentUtility.PagePlaceHolder, StringComparison.Ordinal);
                            var length = index == -1 ? contentAttributeHtml.Length : index;

                            if (currentPageIndex == visualInfo.PageIndex)
                            {
                                var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length);
                                var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlContentElement, pagedContentAttributeHtml));
                                StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageChannelId, currentPageIndex, pageCount, 0);

                                return(Response(pagedBuilder.ToString(), siteInfo));
                            }

                            if (index != -1)
                            {
                                contentAttributeHtml = contentAttributeHtml.Substring(length + ContentUtility.PagePlaceHolder.Length);
                            }
                        }
                        return(null);
                    }
                    contentBuilder.Replace(stlContentElement, contentAttributeHtml);
                }

                if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList))//如果标签中存在<stl:pageContents>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageContentsElementParser = new StlPageContents(stlElement, pageInfo, contextInfo);
                    var pageCount = pageContentsElementParser.GetPageCount(out var totalNum);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }
                else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlLabelList))//如果标签中存在<stl:pageChannels>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageChannelsElementParser = new StlPageChannels(stlElement, pageInfo, contextInfo);
                    var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageChannelsElementParser.Parse(currentPageIndex, pageCount);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }
                else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList))//如果标签中存在<stl:pageSqlContents>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageSqlContentsElementParser = new StlPageSqlContents(stlElement, pageInfo, contextInfo);
                    var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageSqlContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList, thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }

                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);
                return(Response(contentBuilder.ToString(), siteInfo));
            }
            if (templateInfo.TemplateType == TemplateType.ContentTemplate)        //内容页面
            {
                if (contextInfo.ContentInfo == null)
                {
                    return(null);
                }

                if (!string.IsNullOrEmpty(contextInfo.ContentInfo.GetString(ContentAttribute.LinkUrl)))
                {
                    PageUtils.Redirect(contextInfo.ContentInfo.GetString(ContentAttribute.LinkUrl));
                    return(null);
                }

                var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString());

                if (StlParserUtility.IsStlContentElementWithTypePageContent(stlLabelList))//内容存在
                {
                    var stlElement           = StlParserUtility.GetStlContentElementWithTypePageContent(stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);
                    contentBuilder.Replace(stlElement, stlElementTranslated);

                    var innerBuilder = new StringBuilder(stlElement);
                    StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo);
                    var pageContentHtml = innerBuilder.ToString();
                    var pageCount       = StringUtils.GetCount(ContentUtility.PagePlaceHolder, pageContentHtml) + 1;//一共需要的页数
                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        var index  = pageContentHtml.IndexOf(ContentUtility.PagePlaceHolder, StringComparison.Ordinal);
                        var length = index == -1 ? pageContentHtml.Length : index;

                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml = pageContentHtml.Substring(0, length);

                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelId, visualInfo.ContentId, currentPageIndex, pageCount);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }

                        if (index != -1)
                        {
                            pageContentHtml = pageContentHtml.Substring(length + ContentUtility.PagePlaceHolder.Length);
                        }
                    }
                }

                if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList))//如果标签中存在<stl:pageContents>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageContentsElementParser = new StlPageContents(stlElement, pageInfo, contextInfo);
                    var pageCount = pageContentsElementParser.GetPageCount(out var totalNum);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelId, visualInfo.ContentId, currentPageIndex, pageCount);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }
                else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlLabelList))//如果标签中存在<stl:pageChannels>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageChannelsElementParser = new StlPageChannels(stlElement, pageInfo, contextInfo);
                    var pageCount = pageChannelsElementParser.GetPageCount(out _);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageChannelsElementParser.Parse(currentPageIndex, pageCount);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelId, visualInfo.ContentId, currentPageIndex, pageCount);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }
                else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList))//如果标签中存在<stl:pageSqlContents>
                {
                    var stlElement           = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                    var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                    var pageSqlContentsElementParser = new StlPageSqlContents(stlElement, pageInfo, contextInfo);
                    var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum);

                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var thePageInfo = pageInfo.Clone();
                            thePageInfo.IsLocal = true;

                            var pageHtml     = pageSqlContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                            StlParserManager.ReplacePageElementsInContentPage(pagedBuilder, thePageInfo, stlLabelList, visualInfo.ChannelId, visualInfo.ContentId, currentPageIndex, pageCount);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }
                    }
                }

                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);
                StlParserManager.ReplacePageElementsInContentPage(contentBuilder, pageInfo, stlLabelList, contextInfo.ContentInfo.ChannelId, contextInfo.ContentInfo.Id, 0, 1);
                return(Response(contentBuilder.ToString(), siteInfo));
            }

            return(null);
        }
コード例 #25
0
        public override void CreateContext(IntPtr wnd_handle, IntPtr drawable, OpenGLContext share)
        {
            // Force loading of OpenGL library
            // This is later used by the OpenGL class to implement extensions.
            //linker = GetLinker();

            display = API.OpenDisplay(IntPtr.Zero);
            if (display == IntPtr.Zero)
            {
                throw new InvalidOperationException("Cannot connect to X server");
            }

            wnd = wnd_handle;
            int[] attr =
            {
                Glx.GLX_X_RENDERABLE,                   1,
                Glx.GLX_DRAWABLE_TYPE, Glx.GLX_WINDOW_BIT,
                Glx.GLX_RENDER_TYPE,   Glx.GLX_RGBA_BIT,
                Glx.GLX_X_VISUAL_TYPE, Glx.GLX_TRUE_COLOR,
                Glx.GLX_RED_SIZE,                       8,
                Glx.GLX_GREEN_SIZE,                     8,
                Glx.GLX_BLUE_SIZE,                      8,
                Glx.GLX_ALPHA_SIZE,                     0,
                Glx.GLX_DEPTH_SIZE,                    16,
                //Glx.GLX_STENCIL_SIZE    , 8,
                Glx.GLX_DOUBLEBUFFER,                   1,
                0, 0
            };

            API.MapWindow(display, wnd);
            int def_screen = API.DefaultScreen(display);

            Console.WriteLine("Display: 0x" + display.ToString("x"));
            Console.WriteLine("Deault screen: 0x" + def_screen.ToString("x"));
            int[] elems = new int[] { 0 };

            //IntPtr fb = Glx.glXChooseFBConfig(display, def_screen, attr, elems);

            //if (fb == IntPtr.Zero)
            //throw new InvalidOperationException("Could not retrieve framebuffer configuration");

            Console.WriteLine(elems[0]);

            //var info_ptr = Glx.glXGetVisualFromFBConfig(display, Marshal.ReadIntPtr(fb));
            attr = new int[] { GLX_RGBA, GLX_DEPTH_SIZE, 32, GLX_DOUBLEBUFFER, 0 };
            //IntPtr info_ptr = Glx.glXChooseVisual(display, def_screen, attr);
            var info_ptr = API.DefaultVisual(display, def_screen);

            if (info_ptr == IntPtr.Zero)
            {
                throw new NotSupportedException("OpenGL is not supported.");
            }

            VisualInfo info = new VisualInfo();

            Marshal.PtrToStructure(info_ptr, info);
            visual = info_ptr;



            handle = Glx.glXCreateContext(display, visual, IntPtr.Zero, true);

            if (handle == IntPtr.Zero)
            {
                throw new InvalidOperationException("Unable to create OpenGL context");
            }

            Glx.glXMakeCurrent(display, visual, handle);

            int[] parameters = new int[]
            {
                GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
                GLX_CONTEXT_MINOR_VERSION_ARB, 2,
                0
            };

            glXCreateContextAttribsARB = GetProc <XCreateContextAttribsARBProc>("glXCreateContextAttribsARB");

            if (glXCreateContextAttribsARB == null)
            {
                throw new NotSupportedException("OpenGL 3.0 not supported.");
            }

            IntPtr new_handle = glXCreateContextAttribsARB(display, info_ptr, share.Handle, true, parameters);

            if (new_handle == IntPtr.Zero)
            {
                throw new NotSupportedException("OpenGL 3.0 not supported.");
            }

            Glx.glXMakeCurrent(display, visual, IntPtr.Zero);
            Glx.glXDestroyContext(display, handle);
            Glx.glXMakeCurrent(display, visual, new_handle);
            handle = new_handle;

            Console.WriteLine("glX Initialization succeded.");
        }
コード例 #26
0
 private HttpResponseMessage GetFileTemplate(VisualInfo visualInfo, PageInfo pageInfo, ContextInfo contextInfo, StringBuilder contentBuilder, SiteInfo siteInfo)
 {
     Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);
     return(Response(contentBuilder.ToString(), siteInfo));
 }
コード例 #27
0
        private async Task <FileResult> GetContentTemplateAsync(VisualInfo visualInfo, StringBuilder contentBuilder)
        {
            var content = await _parseManager.GetContentAsync();

            if (content == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(content.LinkUrl))
            {
                HttpContext.Response.Redirect(content.LinkUrl);
                return(null);
            }

            var stlLabelList = ParseUtils.GetStlLabels(contentBuilder.ToString());

            if (StlParserUtility.IsStlContentElementWithTypePageContent(stlLabelList)) //内容存在
            {
                var stlElement           = StlParserUtility.GetStlContentElementWithTypePageContent(stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);
                contentBuilder.Replace(stlElement, stlElementTranslated);

                var innerBuilder = new StringBuilder(stlElement);
                await _parseManager.ParseInnerContentAsync(innerBuilder);

                var pageContentHtml = innerBuilder.ToString();
                var pageCount       = StringUtils.GetCount(Constants.PagePlaceHolder, pageContentHtml) + 1; //一共需要的页数
                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    var index  = pageContentHtml.IndexOf(Constants.PagePlaceHolder, StringComparison.Ordinal);
                    var length = index == -1 ? pageContentHtml.Length : index;

                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = pageContentHtml.Substring(0, length);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList,
                                                                                  currentPageIndex, pageCount);

                        return(GetResponse(pagedBuilder.ToString()));
                    }

                    if (index != -1)
                    {
                        pageContentHtml = pageContentHtml.Substring(length + Constants.PagePlaceHolder.Length);
                    }
                }
            }

            if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) //如果标签中存在<stl:pageContents>
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageContents.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageContentsElementParser = await StlPageContents.GetAsync(stlElement, _parseManager);

                var(pageCount, totalNum) = pageContentsElementParser.GetPageCount();

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }
            else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlLabelList)) //如果标签中存在<stl:pageChannels>
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageChannelsElementParser = await StlPageChannels.GetAsync(stlElement, _parseManager);

                var pageCount = pageChannelsElementParser.GetPageCount(out _);

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount);

                        var pagedBuilder =
                            new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }
            else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList)
                     ) //如果标签中存在<stl:pageSqlContents>
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlElement, _parseManager);

                var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum);

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInContentPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }

            await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

            await _parseManager.ReplacePageElementsInContentPageAsync(contentBuilder, stlLabelList, 0, 1);

            return(GetResponse(contentBuilder.ToString()));
        }
コード例 #28
0
        private HttpResponseMessage GetChannelTemplate(VisualInfo visualInfo, SiteInfo siteInfo, StringBuilder contentBuilder, PageInfo pageInfo, ContextInfo contextInfo)
        {
            var nodeInfo = ChannelManager.GetChannelInfo(siteInfo.Id, visualInfo.ChannelId);

            if (nodeInfo == null)
            {
                return(null);
            }

            if (nodeInfo.ParentId > 0)
            {
                if (!string.IsNullOrEmpty(nodeInfo.LinkUrl))
                {
                    PageUtils.Redirect(nodeInfo.LinkUrl);
                    return(null);
                }
            }

            var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString());

            //如果标签中存在Content
            var stlContentElement = string.Empty;

            foreach (var label in stlLabelList)
            {
                if (StlParserUtility.IsStlChannelElement(label, ChannelAttribute.PageContent))
                {
                    stlContentElement = label;
                    break;
                }
            }

            if (!string.IsNullOrEmpty(stlContentElement)) //内容存在
            {
                var innerBuilder = new StringBuilder(stlContentElement);
                StlParserManager.ParseInnerContent(innerBuilder, pageInfo, contextInfo);
                var contentAttributeHtml = innerBuilder.ToString();
                var pageCount            = StringUtils.GetCount(ContentUtility.PagePlaceHolder, contentAttributeHtml) + 1; //一共需要的页数
                if (pageCount > 1)
                {
                    Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        var thePageInfo = pageInfo.Clone();
                        thePageInfo.IsLocal = true;

                        var index  = contentAttributeHtml.IndexOf(ContentUtility.PagePlaceHolder, StringComparison.Ordinal);
                        var length = index == -1 ? contentAttributeHtml.Length : index;

                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString()
                                                                 .Replace(stlContentElement, pagedContentAttributeHtml));
                            StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList,
                                                                              thePageInfo.PageChannelId, currentPageIndex, pageCount, 0);

                            return(Response(pagedBuilder.ToString(), siteInfo));
                        }

                        if (index != -1)
                        {
                            contentAttributeHtml =
                                contentAttributeHtml.Substring(length + ContentUtility.PagePlaceHolder.Length);
                        }
                    }

                    return(null);
                }

                contentBuilder.Replace(stlContentElement, contentAttributeHtml);
            }

            if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) //如果标签中存在<stl:pageContents>
            {
                var stlElement           = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList);
                var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                var pageContentsElementParser = new StlPageContents(stlElement, pageInfo, contextInfo);
                var pageCount = pageContentsElementParser.GetPageCount(out var totalNum);

                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var thePageInfo = pageInfo.Clone();
                        thePageInfo.IsLocal = true;

                        var pageHtml     = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList,
                                                                          thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                        return(Response(pagedBuilder.ToString(), siteInfo));
                    }
                }
            }
            else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlLabelList)) //如果标签中存在<stl:pageChannels>
            {
                var stlElement           = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                var pageChannelsElementParser = new StlPageChannels(stlElement, pageInfo, contextInfo);
                var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum);

                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var thePageInfo = pageInfo.Clone();
                        thePageInfo.IsLocal = true;

                        var pageHtml     = pageChannelsElementParser.Parse(currentPageIndex, pageCount);
                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList,
                                                                          thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                        return(Response(pagedBuilder.ToString(), siteInfo));
                    }
                }
            }
            else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList)
                     ) //如果标签中存在<stl:pageSqlContents>
            {
                var stlElement           = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                var stlElementTranslated = StlParserManager.StlEncrypt(stlElement);

                var pageSqlContentsElementParser = new StlPageSqlContents(stlElement, pageInfo, contextInfo);
                var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum);

                Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var thePageInfo = pageInfo.Clone();
                        thePageInfo.IsLocal = true;

                        var pageHtml     = pageSqlContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false);
                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        StlParserManager.ReplacePageElementsInChannelPage(pagedBuilder, thePageInfo, stlLabelList,
                                                                          thePageInfo.PageChannelId, currentPageIndex, pageCount, totalNum);

                        return(Response(pagedBuilder.ToString(), siteInfo));
                    }
                }
            }

            Parser.Parse(pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);
            return(Response(contentBuilder.ToString(), siteInfo));
        }
コード例 #29
0
        private async Task <FileResult> GetChannelTemplateAsync(VisualInfo visualInfo, StringBuilder contentBuilder)
        {
            var nodeInfo = await _channelRepository.GetAsync(visualInfo.ChannelId);

            if (nodeInfo == null)
            {
                return(null);
            }

            if (nodeInfo.ParentId > 0)
            {
                if (!string.IsNullOrEmpty(nodeInfo.LinkUrl))
                {
                    HttpContext.Response.Redirect(nodeInfo.LinkUrl);
                    return(null);
                }
            }

            var stlLabelList = ParseUtils.GetStlLabels(contentBuilder.ToString());

            //如果标签中存在Content
            var stlContentElement = string.Empty;

            foreach (var label in stlLabelList)
            {
                if (StlParserUtility.IsStlChannelElement(label, StlParserUtility.PageContent))
                {
                    stlContentElement = label;
                    break;
                }
            }

            if (!string.IsNullOrEmpty(stlContentElement)) //内容存在
            {
                var innerBuilder = new StringBuilder(stlContentElement);
                await _parseManager.ParseInnerContentAsync(innerBuilder);

                var contentAttributeHtml = innerBuilder.ToString();
                var pageCount            = StringUtils.GetCount(Constants.PagePlaceHolder, contentAttributeHtml) + 1; //一共需要的页数
                if (pageCount > 1)
                {
                    await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                    for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                    {
                        var index  = contentAttributeHtml.IndexOf(Constants.PagePlaceHolder, StringComparison.Ordinal);
                        var length = index == -1 ? contentAttributeHtml.Length : index;

                        if (currentPageIndex == visualInfo.PageIndex)
                        {
                            var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length);
                            var pagedBuilder = new StringBuilder(contentBuilder.ToString()
                                                                 .Replace(stlContentElement, pagedContentAttributeHtml));
                            await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, 0);

                            return(GetResponse(pagedBuilder.ToString()));
                        }

                        if (index != -1)
                        {
                            contentAttributeHtml =
                                contentAttributeHtml.Substring(length + Constants.PagePlaceHolder.Length);
                        }
                    }

                    return(null);
                }

                contentBuilder.Replace(stlContentElement, contentAttributeHtml);
            }

            if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) //如果标签中存在<stl:pageContents>
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageContents.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageContentsElementParser = await StlPageContents.GetAsync(stlElement, _parseManager);

                var(pageCount, totalNum) = pageContentsElementParser.GetPageCount();

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }
            else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlLabelList)) //如果标签中存在<stl:pageChannels>
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageChannelsElementParser = await StlPageChannels.GetAsync(stlElement, _parseManager);

                var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum);

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }
            //如果标签中存在<stl:pageSqlContents>
            else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList))
            {
                var stlElement           = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlLabelList);
                var stlElementTranslated = _parseManager.StlEncrypt(stlElement);

                var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlElement, _parseManager);

                var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum);

                await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

                for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++)
                {
                    if (currentPageIndex == visualInfo.PageIndex)
                    {
                        var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false);

                        var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml));

                        await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum);

                        return(GetResponse(pagedBuilder.ToString()));
                    }
                }
            }

            await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

            return(GetResponse(contentBuilder.ToString()));
        }
コード例 #30
0
        private async Task <FileResult> GetFileTemplateAsync(VisualInfo visualInfo, StringBuilder contentBuilder)
        {
            await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true);

            return(GetResponse(contentBuilder.ToString()));
        }
コード例 #31
0
    IEnumerator PlayerAttack(int moveDir)
    {
        List <BasicEnemyAI> enemiesToKill  = new List <BasicEnemyAI>();
        List <Transform>    attackAnimObjs = new List <Transform>();
        List <Vector3[]>    dijkPoints     = new List <Vector3[]>();

        if (playerGridCell.cellNeighbours[(moveDir + 2) % 6] != null && playerGridCell.cellNeighbours[(moveDir + 2) % 6].entity != null && playerGridCell.cellNeighbours[(moveDir + 2) % 6].entity.tag == "Enemy")
        {
            enemiesToKill.Add(playerGridCell.cellNeighbours[(moveDir + 2) % 6].entity.GetComponent <BasicEnemyAI>());
        }

        if (playerGridCell.cellNeighbours[(moveDir + 4) % 6] != null && playerGridCell.cellNeighbours[(moveDir + 4) % 6].entity != null && playerGridCell.cellNeighbours[(moveDir + 4) % 6].entity.tag == "Enemy")
        {
            enemiesToKill.Add(playerGridCell.cellNeighbours[(moveDir + 4) % 6].entity.GetComponent <BasicEnemyAI>());
        }

        for (int i = 0; i < enemiesToKill.Count; i++)
        {
            dijkPoints.Add(new Vector3[4] {
                (player.transform.position), enemiesToKill[i].transform.position, playerGridCell.transform.position, playerGridCell.transform.position
            });
            attackAnimObjs.Add(Instantiate(attackAnimObj, dijkPoints[i][0], Quaternion.identity).transform);
        }
        if (playerGridCell.cellNeighbours[moveDir] != null && playerGridCell.cellNeighbours[moveDir].entity != null && playerGridCell.cellNeighbours[moveDir].entity.tag == "Enemy")
        {
            if (enemiesToKill.Count != 0)
            {
                for (int i = 0; i < enemiesToKill.Count; i++)
                {
                    dijkPoints[i][3] = playerGridCell.cellNeighbours[moveDir].transform.position;
                }
            }
            else
            {
                dijkPoints.Add(new Vector3[2] {
                    player.transform.position, playerGridCell.cellNeighbours[moveDir].transform.position
                });
                attackAnimObjs.Add(Instantiate(attackAnimObj, dijkPoints[0][0], Quaternion.identity).transform);
            }
            enemiesToKill.Add(playerGridCell.cellNeighbours[moveDir].entity.GetComponent <BasicEnemyAI>());
        }
        for (int i = 0; i < enemiesToKill.Count; i++)
        {
            StartCoroutine(enemiesToKill[i].Die(VisualInfo.deathExpansionRatio));
        }

        float progress = 0;

        while (true)
        {
            progress += (playerMoveSpeed * Time.deltaTime) / (2 * HexMetrics.innerRadius);
            for (int i = 0; i < attackAnimObjs.Count; i++)
            {
                attackAnimObjs[i].position = VisualInfo.GetBezierCurvePoint(dijkPoints[i], progress);
            }
            if (progress >= 1)
            {
                for (int i = 0; i < attackAnimObjs.Count; i++)
                {
                    Destroy(attackAnimObjs[i].gameObject);
                    //enemiesToKill[i].Die();
                }
                yield return(true);

                break;
            }
            yield return(null);
        }
    }
コード例 #32
0
        private void WriteResponse(StringBuilder contentBuilder, PublishmentSystemInfo publishmentSystemInfo, PageInfo pageInfo, ContextInfo contextInfo, VisualInfo visualInfo)
        {
            StlUtility.ParseStl(publishmentSystemInfo, pageInfo, contextInfo, contentBuilder, visualInfo.FilePath, true);//生成页面

            Response.ContentEncoding = Encoding.GetEncoding(publishmentSystemInfo.Additional.Charset);

            Response.Write(contentBuilder.ToString());
        }