实现安全绿色的网络空间课堂的数据结构及C++Builder核心代码

本博文主要提供实现安全绿色的网络空间课堂的数据结构及C++Builder核心代码,全文分为三个部分:

 程序下载网址:网盘下载

 

链接:https://pan.baidu.com/s/1blzPOVRUrCbKIeu8XOaSVg
提取码:r80x

 

 

第一部分:用5种状态进行控制,实现脚本解析的C++Builder代码

5种状态进行控制,实现脚本解析的C++Builder代码,在Win10+Embarcadero RAD Studio 10.3下调试通过,基于IdHTTPServer中间件的“普鲁托安全Web应用服务程序”Pluto.exe运行正常稳定。目前,最新稳定版本为V1.9.9.2版,也是文章投稿时的版本。

 

函数声明:AnsiString videoPlay(AnsiString sFileName,AnsiString sID);

 

//const int BUFF 2048;//1024

//AnsiString sRetVideo;

AnsiString sFileContent=sTsimpleVideo;//Memo2->Lines->Text;// "";

/*定义变量:标题,作者,视频文件名称*/

String sSpaceName="";

String sTitle="";

String sAuthor="";

String sFile="";

String sFooter="<!--自定义html-->";

FILE *licFile = fopen(sFileName.c_str(),"r");

if (licFile == NULL)

{

printf("OPEN失败\n");

}

else

{

char sLine[FILEBUFF];//[1024];

AnsiString stLine;

memset(sLine, 0, FILEBUFF);//1024);

int istatus=0;// 状态:0初始态,1逐行态,2数组态开始,3数组态结束,4代码态sCode,5结束态

//一行行读

while ((fgets(sLine, FILEBUFF, licFile))!= NULL && istatus<5)

{

stLine=sLine;

//RichEdit1->Lines->Add(stLine);

//剔除行后注释

int iPos =stLine.Pos("//");// str.find(target); //int iLen =stLine.Length();

   // RichEdit1->Lines->Add(iPos);

if(iPos==1)

continue;//break;  //跳过注释行,继续读取下一行

else if(iPos>1)

stLine=stLine.SubString(1,iPos-1);

//else

 

 

// RichEdit1->Lines->Add(istatus);

//sFileContent+=sLine;

//RichEdit1->Lines->Add(stLine);

if(stLine.Pos("<%")>0)

{

istatus=1;//开始

continue;

}

//stLine=StringReplace(sCode,"\n","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

switch(istatus)

{

case 0:

break;

case 1:

//逐行开始

if(stLine.Pos("sSpaceName=")>0)

{

sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sTitle=")>0)

{

sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sAuthor=")>0)

{

sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sFile=")>0)

{

sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("[]=")>0)

{

istatus=2;

}

else if(stLine.Pos("sFooter=")>0)

{

istatus=4;

}

break;

case 2:    //数组态开始

if(stLine.Pos("[]end")>0)

{

istatus=3; //数组结束 //sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase); //RichEdit1->Lines->Add(sFile);

}

else

{

AnsiString sTempID;

if(stLine.Pos(":")>1)

{

sTempID=stLine.SubString(1,stLine.Pos(":")-1);

if(sFooter.Pos(" target= _blank>" + sTempID + "</a> ")<1)

sFooter+="<a href=\"?ycsID=" + sTempID + "\" target= _blank>" + sTempID + "</a>  ";

 

if(sTempID==sID)

{

//RichEdit1->Lines->Add(sID);

stLine=stLine.SubString(stLine.Pos(":")+1,stLine.Length()-stLine.Pos(":"));

// RichEdit1->Lines->Add(stLine);

if(stLine.Pos("sSpaceName=")>0)

{   sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//RichEdit1->Lines->Add(sSpaceName);

}

else if(stLine.Pos("sTitle=")>0)

{

sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

// RichEdit1->Lines->Add(sTitle);

}

else if(stLine.Pos("sAuthor=")>0)

{

sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//RichEdit1->Lines->Add(sAuthor);

}

else if(stLine.Pos("sFile=")>0)

{   sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

 

}

}

}

}

break;

case 3://数组结束

if(stLine.Pos("sFooter=")>0)

istatus=4; //代码态开始

break;

case 4://代码态

if(stLine.Pos("%>")>0)

{

istatus=5; //结束态

//RichEdit1->Lines->Add(sFooter);

//sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else

{

sFooter+=stLine;

}

break;

case 5:    //结束态

;

break;

 

}

}

fclose(licFile);

sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sFile%>",sFile,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

return sFileContent;

 

//作者:一策书(湘岳阳万江波)

 

 

第二部分:以yanzhou.vsp脚本文件为例,讲解《2016——2019xx市数学中考试卷压轴题解析》的视频集制作的示例代码

 示例代码文件为yanzhou.vsp,示例内容如下:

 

//定义变量:标题,作者,视频文件名称*
//String sSpaceName="";
//String sTitle="";
//String sAuthor="";
//String sFile="";
<%
sSpaceName=2016——2019岳阳市数学中考试卷压轴题解析
sAuthor=张大庆
sTitle=岳阳市数学中考试卷2016年第08题
sFile=yazhou/16-08.mp4

 

[]=;//数组开始,标题,作者,文件路径
16-08:sTitle=岳阳市数学中考试卷2016年第08题
16-08:sFile=yazhou/16-08.mp4

 

16-16:sTitle=岳阳市数学中考试卷2016年第16题
16-16:sFile=yazhou/16-16.mp4

 

16-23:sTitle=岳阳市数学中考试卷2016年第23题
16-23:sFile=yazhou/16-23.mp4

 

16-24:sTitle=岳阳市数学中考试卷2016年第24题
16-24:sFile=yazhou/16-24.mp4

 

17-08:sTitle=岳阳市数学中考试卷2017年第08题
17-08:sFile=yazhou/17-08.mp4

 

17-16:sTitle=岳阳市数学中考试卷2017年第16题
17-16:sFile=yazhou/17-16.mp4

 

17-23:sTitle=岳阳市数学中考试卷2017年第23题
17-23:sFile=yazhou/17-23.mp4

 

17-24:sTitle=岳阳市数学中考试卷2017年第24题
17-24:sFile=yazhou/17-24.mp4

 

18-08:sTitle=岳阳市数学中考试卷2018年第08题
18-08:sFile=yazhou/18-08.mp4

 

18-16:sTitle=岳阳市数学中考试卷2018年第16题
18-16:sFile=yazhou/18-16.mp4

 

18-23:sTitle=岳阳市数学中考试卷2018年第23题
18-23:sFile=yazhou/18-23.mp4

 

18-24:sTitle=岳阳市数学中考试卷2018年第24题
18-24:sFile=yazhou/18-24.mp4

 

19-08:sTitle=岳阳市数学中考试卷2019年第08题
19-08:sFile=yazhou/19-08.mp4

 

19-16:sTitle=岳阳市数学中考试卷2019年第16题
19-16:sFile=yazhou/19-16.mp4

 

19-23:sTitle=岳阳市数学中考试卷2019年第23题
19-23:sFile=yazhou/19-23.mp4

 

19-24:sTitle=岳阳市数学中考试卷2019年第24题
19-24:sFile=yazhou/19-24.mp4
[]end;//数组结束

 

sFooter=<!--添加你的Html代码-->
<p><br/></p>
%>

//作者:一策书(湘岳阳万江波)

 

第三部分:判断文件名设置不同的ContentType的类型值,解决了.js,.zip等文件的问题。

 

AnsiString TfrmHttpServer::GetContentType(AnsiString strReq)
{
AnsiString strctype;
if(strReq.Pos(".mp4")>0) //文件类型
{
strctype = "video/mpeg4";
}
else if(strReq.Pos(".mp3")>0) //文件类型,
{
strctype = "audio/mp3";
}
else if(strReq.Pos(".jpg")>0) //文件类型,
{
strctype = "image/jpeg";
}
else if(strReq.Pos(".png")>0) //文件类型,
{
strctype = "application/x-png";
}
else if(strReq.Pos(".css")>0) //文件类型,
{
strctype = "text/css";
}
else if(strReq.Pos(".js")>0) //文件类型,
{
strctype = "application/x-javascript";
}
//else if(strReq.Pos(".mp4")>0) //文件类型
//{
// strctype = "video/mpeg4";
//}
else if(strReq.Pos(".ico")>0) //文件类型
{
strctype = "image/x-icon";
}
else if(strReq.Pos(".html")>0|strReq.Pos(".htm")>0|strReq.Pos(".vsp")>0) //文件类型
{
strctype ="text/html";
}
else
{
strctype ="application/octet-stream";//.*( 二进制流,不知道下载文件类型)
}
return strctype;

//参考文献:response的contentType 几种类型 https://blog.csdn.net/qq_37651267/article/details/91380351
}

作者:一策书(湘岳阳万江波)

 

AnsiString videoPlay(AnsiString sFileName,AnsiString sID);

 

//const int BUFF 2048;//1024

//AnsiString sRetVideo;

AnsiString sFileContent=sTsimpleVideo;//Memo2->Lines->Text;// "";

/*定义变量:标题,作者,视频文件名称*/

String sSpaceName="";

String sTitle="";

String sAuthor="";

String sFile="";

String sFooter="<!--自定义html-->";

FILE *licFile = fopen(sFileName.c_str(),"r");

if (licFile == NULL)

{

printf("OPEN失败\n");

}

else

{

char sLine[FILEBUFF];//[1024];

AnsiString stLine;

memset(sLine, 0, FILEBUFF);//1024);

int istatus=0;// 状态:0初始态,1逐行态,2数组态开始,3数组态结束,4代码态sCode,5结束态

//一行行读

while ((fgets(sLine, FILEBUFF, licFile))!= NULL && istatus<5)

{

stLine=sLine;

//RichEdit1->Lines->Add(stLine);

//剔除行后注释

int iPos =stLine.Pos("//");// str.find(target); //int iLen =stLine.Length();

   // RichEdit1->Lines->Add(iPos);

if(iPos==1)

continue;//break;  //跳过注释行,继续读取下一行

else if(iPos>1)

stLine=stLine.SubString(1,iPos-1);

//else

 

 

// RichEdit1->Lines->Add(istatus);

//sFileContent+=sLine;

//RichEdit1->Lines->Add(stLine);

if(stLine.Pos("<%")>0)

{

istatus=1;//开始

continue;

}

//stLine=StringReplace(sCode,"\n","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

switch(istatus)

{

case 0:

break;

case 1:

//逐行开始

if(stLine.Pos("sSpaceName=")>0)

{

sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sTitle=")>0)

{

sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sAuthor=")>0)

{

sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("sFile=")>0)

{

sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else if(stLine.Pos("[]=")>0)

{

istatus=2;

}

else if(stLine.Pos("sFooter=")>0)

{

istatus=4;

}

break;

case 2:    //数组态开始

if(stLine.Pos("[]end")>0)

{

istatus=3; //数组结束 //sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase); //RichEdit1->Lines->Add(sFile);

}

else

{

AnsiString sTempID;

if(stLine.Pos(":")>1)

{

sTempID=stLine.SubString(1,stLine.Pos(":")-1);

if(sFooter.Pos(" target= _blank>" + sTempID + "</a> ")<1)

sFooter+="<a href=\"?ycsID=" + sTempID + "\" target= _blank>" + sTempID + "</a>  ";

 

if(sTempID==sID)

{

//RichEdit1->Lines->Add(sID);

stLine=stLine.SubString(stLine.Pos(":")+1,stLine.Length()-stLine.Pos(":"));

// RichEdit1->Lines->Add(stLine);

if(stLine.Pos("sSpaceName=")>0)

{   sSpaceName=StringReplace(stLine,"sSpaceName=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//RichEdit1->Lines->Add(sSpaceName);

}

else if(stLine.Pos("sTitle=")>0)

{

sTitle=StringReplace(stLine,"sTitle=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

// RichEdit1->Lines->Add(sTitle);

}

else if(stLine.Pos("sAuthor=")>0)

{

sAuthor=StringReplace(stLine,"sAuthor=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

//RichEdit1->Lines->Add(sAuthor);

}

else if(stLine.Pos("sFile=")>0)

{   sFile=StringReplace(stLine,"sFile=","",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

 

}

}

}

}

break;

case 3://数组结束

if(stLine.Pos("sFooter=")>0)

istatus=4; //代码态开始

break;

case 4://代码态

if(stLine.Pos("%>")>0)

{

istatus=5; //结束态

//RichEdit1->Lines->Add(sFooter);

//sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

else

{

sFooter+=stLine;

}

break;

case 5:    //结束态

;

break;

 

}

}

fclose(licFile);

sFileContent=StringReplace(sFileContent,"<%=sSpaceName%>",sSpaceName,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sTitle%>",sTitle,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sAuthor%>",sAuthor,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sFile%>",sFile,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

sFileContent=StringReplace(sFileContent,"<%=sFooter%>",sFooter,TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);

}

return sFileContent;

 

//作者:一策书(湘岳阳万江波)

 

  

 

posted @ 2020-05-21 16:36  曦海客·一策书·萬江波  阅读(316)  评论(0编辑  收藏  举报