SWAN服务器系统白皮书.doc_第1页
SWAN服务器系统白皮书.doc_第2页
SWAN服务器系统白皮书.doc_第3页
SWAN服务器系统白皮书.doc_第4页
SWAN服务器系统白皮书.doc_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20SWAN服务器系统白皮书(2012.07版)一、 平台基本介绍3基本工作原理4系统构成4二、 系统配置51、Initsetting.ini52、mcre.ini53、Initsetting.ini54、mcre.ini55、menu.ini66、modulesettings.ini67、Timertrigger.ini、filetrigger.ini、scheduletrigger.ini68、线程配置文件:7三、 系统功能71、基本功能:72、配置和辅助功能:73、系统附带的调试功能,所有配置文件请遵守默认规则:7四、 数据格式81、Diamond 35 通用地理标志描述格式82、131类格点格式,用于记录多层的格点数据93、自动站时序数据11五、 子系统介绍131、雷达拼图和外推子系统132、实时报警主子系统143、云图识别子系统143、雷电资料处理子系统145、清理子系统146、FTP分发子系统14六、 模块二次开发标准151.模块和相关文件的要求152.系统交换约定和临时文件规则163.模块的附属支持184.模块的运行流程185.线程组的分配原则和线程模块间通讯196.信息交换标准207.模块开发解说201、 平台基本介绍SWAN服务器框架是一个程序调度平台,用来按照条件调度服务器模块运行,发送结果通知给对应的客户端,并维护服务器产品,记录模块运行情况。服务器框架由基本系统,基本配置系统,外接扩展程序和外接配置系统组成。基本系统负责整个系统的基本运行,基本配置系统用来配置基本系统的参数,外接扩展程序用来扩展基本系统的功能,外接配置系统用来配置其他扩展的部分程序。基本工作原理基本系统是触发器和线程之间的控制,信息的发送和运行情况的记录的平台,基本系统启动后将运行所有的线程,然后将线程挂起,将触发器和线程相连接,当触发器满足条件时,向对应的线程发出唤醒信号,使线程运行一次,线程运行完后再次进入休眠,等待下一次信号。线程运行过程中的信息被基本系统记录入运行日志。系统构成系统由基本系统、基本系统配置、扩展功能库、扩展配置系统组成。基本系统是由线程和触发器组成的调度系统。基本配置系统由路径配置,运行参数配置和模块配置三部分组成,路径配置用来配置系统中的路径参数,根据配置文件的路径设置更改。运行参数用来配置系统的运行设置,包括运行模式,系统备份模式,网络参数。模块配置用来读取配置系统中的模块的相应的INI文件中的计算参数和附加设置。系统的附加功能由外接扩展功能库来实现,目前的系统调试功能,工具菜单都是通过外接扩展功能库来实现。对于模块引入的配置,通过外接配置系统来实现,外接扩展系统是外接扩展功能库的一部分,雷达配置就是一个外接配置模块,专门用来更改拼图模块和雷达特征量报警模块的参数。系统目录由programpe、procpe、conf、log、doc、tmp六个目录。Programpe存放系统的主程序和公用动态库。Procpe存放模块程序和外接功能库,其中系统功能的外界库存放在sys子目录下,相关图片资源存放在res子目录下。Conf存放配置文件,其中系统的配置文件存放在sys子目录下,其他的存放在Conf目录下,对于一些子参数配置,可以存放在子目录下,但是必须要有一个和模块名同名的配置文件存放在Conf下。Log目录存放运行的日志文件。Doc目录存放一些文档。Tmp目录存放运行时的临时文件,如果清空tmp目录相当于把运行状态重置。2、 系统配置系统配置位于conf下的sys目录,主配置由5个文件组成:1、Initsetting.ini 路径的配置定义,系统的输入和输出路径都在这里登记。2、mcre.ini 系统运行配置文件,基本系统的配置定义。menu.ini 菜单配置文件,扩展菜单的定义文件。modulesettings.ini 模块配置文件定义,需要手工配置的模块文件的对应配置会在这个文件的列表里。timertrigger.ini 时钟触发器配置,用来定义由定时控制的线程的对应时钟触发器条目。Scheduletrigger.ini计划任务触发器配置文件,里面定义了计划任务的规则字串。Filetrigger.ini定义了文件监视触发器的规则条目。一些线程命名的配置文件,记录每个线程的配置信息。其他未说明文件请予以保留,属于未完全规划完的功能所留下的文件。3、Initsetting.ini输入输出配置,此文件包含两个段,输入路径和产品路径,输入路径为绝对路径,产品路径为相对路径,系统的路径配置会随着输入路径数目变化自动适应。输入路径配置格式:路径名=绝对路径。产品路径配置格式:路径名=相对路径。以上路径名为全局唯一。4、mcre.ini框架的主控配置,包括路径设置,系统设置,网络设置和线程设置。路径设置目前只包含产品根路径。系统设置包括产品压缩,运行模式和产品备份三个主要参数。网络设置主要包含网络发送的参数,包括发送端口,网络发布模式,对应的客户IP地址。线程设置包括了系统运行的线程设置,记录的是线程配置文件。格式:线程名=线程配置文件。5、menu.ini扩展菜单配置,服务器框架的大多数功能都是通过扩展菜单配置来实现的,扩展菜单配置格式为:菜单显示名=父菜单ID|图标|处理的动态库|处理的函数兼ID|菜单风格。一共五个段,用”|“分割。当该菜单不存在其中一个段的变量时,用NULL表示。父菜单ID为此菜单建立在哪个菜单上,如果为NULL,则为顶层菜单。其中图标为位于procpe目录下的res中的png文件名。处理的动态库位于procpe下sys目录中的动态库。处理的函数为动态库中的导出函数,建立菜单的时候同时会用这个函数名作为菜单的ID,这样其他菜单可以建立在这个菜单上。菜单风格为菜单和工具栏的风格,一共五个关键词:NULL、TOOLBARICON、TOOLBARSEP、MENU、MENUSEP,分别为空,即普通菜单、在工具栏放置图标、,普通工具栏分割条,父菜单,即其他菜单可以建立在这个菜单下、菜单栏分割条。6、modulesettings.ini配置模块配置对话框中可用的条目,默认基本系统中模块配置是没有可选的配置项,只有在modulesettings.ini中加入条目的时候,才会在模块配置中出现条目。配置的格式为:显示名=配置文件名。7、Timertrigger.ini、filetrigger.ini、scheduletrigger.ini时钟触发器的配置文件,格式为:每一行一个触发器的配置。时钟运行以秒为单位,到符合触发器的条件时,便像配置中的线程发送一次运行消息。定时器配置格式:触发器名=时钟间隔|激活的线程名|激活的方式文件监视配置格式:触发器名=监视目录|激活的线程名|激活的方式|延时时间计划任务触发器配置格式:触发器名=时间规则|激活的线程名|激活的方式激活线程名可以是多个,使用逗号“,“来分割,激活方式为S或者A,S为设置运行一次,A为在原来的基础上增加一次。原则上以使用S为主,增加方式在某些运行时间较长的时候会造成连续运行,原则上运行的时间间隔按照系统运行性能来配置,有多个激活线程时,激活方式也要有多个,一个线程名对应一个激活方式,均使用”,“来分割。8、线程配置文件:线程配置文件用来配置线程中的程序,格式为每一行一个程序配置,不需要总体的数目项。配置格式为:程序名=激活线程|激活方式|最大时限,其中激活线程和激活方式与触发器相同,不存在对应激活线程是用NA填充。最大时限为程序运行的最大时间限制,超过该时间程序被强行中止,并记录超时,时间单位为秒。3、 系统功能1、基本功能:基本功能主要为调度功能,包含运行、停止和退出,点击运行后,系统就按照触发器条件唤醒线程进行计算处理。2、配置和辅助功能:配置功能由外挂功能库市县,具体情形所带的模块不同。一般带有路径配置、运行配置和模块配置。,附加功能包含清理、配置保存、配置加载。3、系统附带的调试功能,所有配置文件请遵守默认规则:开发版本具有调试菜单,位于工具-调试菜单下运行选中程序:运行左边列表栏中选中的程序。当前程序配置:打开左边列表中选中程序的配置文件当前线程配置:打开当前选中线程的配置文件定时器配置:打开时钟触发器配置文件。文件监视配置:打开文件监视触发器配置文件任务表配置:打开计划任务触发器配置文件INI条目配置:编辑模块配置的INI文件系统主配置:编辑mcre.ini主配置文件,可以在其中打开或者关闭某个线程资料路径配置:编辑系统的输入输出路径初始化配置外挂菜单配置:编辑系统的外挂功能菜单系统注册配置:组件系统的安装信息添加空白线程:添加一个空白线程的配置文件并且载入4、 数据格式SWAN中的数据格式主要是3类:35类格式、131类格式和自动站时序文件。请注意版本更新时的格式更新变化1、Diamond 35 通用地理标志描述格式35类格式普遍应用在SWAN中,用来表述报警,用户自定义地图等地理性质的数据,35类数据格式存储数据的位置和属性,具体的显示方式由配置和显示引擎来决定,35类数据读取必须采用解释行的行读取,首先判断行的标记,然后才可以读取后续数据。35类数据是文本文件,文件后缀TXT:Diamond 35 文字描述 TAB(类型描述符) 文件生成时间 记录条数 无效记录表达值记录字段数 字段1名 字段2名 字段3名 .记录类型 记录坐标点数经度 纬度 高度经度 纬度 高度经度 纬度 高度.字段1 字段2 字段3 .其中记录类型分为:POINT(点),MULTIPOINT(多个点),PLINE(线条),POLYGON(多边形)TAB下一行必须是表格定义,中间不能加空行TAB和TABALM合并处理,不再区分报警,报警使用文件名判断2、131类格点格式,用于记录多层的格点数据131格式经过数次修订,目前大多数数据仍未1.0格式,但是显示引擎已经能够解析2.0格式的数据,具体应用可以根据情况使用相应版本的格式,主要是从后面的Reserved中修改为对应版本的大小。保证文件头格式总长度1024个字节。说明:(老版本文件头长256字节,蓝色字段在老版本中不存在,只在新版本中存在。新旧版本的判断在Flag8字段,如果内容是“SWAN”则是新版本,否则为老版本),站点设置一般供雷达用,也可用于其他,只有20个空位char ZonName12;/ diamond 131 12个字节char DataName38;/数据说明(例如 2008年5月19日雷达三维拼图)38个字节charFlag8;/ 文件标志,swancharVersion8;/ 数据版本号,1.0 目前为2.0unsigned short int year;/2008 两个字节unsigned short int month;/05 两个字节unsigned short int day;/19 两个字节unsigned short int hour;/14 两个字节unsigned short int minute;/31 两个字节unsigned short int interval ; /两个字节 unsigned short int XNumGrids;/1300 两个字节unsigned short int YNumGrids;/800 两个字节unsigned short int ZNumGrids;/20 两个字节int RadarCount; /拼图雷达数 四个字节float StartLon; /网格开始经度(左上角) 四个字节float StartLat; /网格开始纬度(左上角) 四个字节float CenterLon;/网格中心经度 四个字节float CenterLat;/网格中心纬度 四个字节float XReso;/经度方向分辨率 四个字节float YReso;/纬度方向分辨率 四个字节float ZhighGrids40;/垂直方向的高度(单位km)数目根据ZnumGrids而得(最大40层) 160个字节。char RadarStationName2016; /相关站点名称,20*16字节float RadarLongitude20; /相关站点所在经度,单位:度, 4*20字节float RadarLatitude20; /相关站点所在纬度,单位:度, 4*20字节float RadarAltitude20; /相关站点所在海拔高度,单位:米, 4*20字节unsigned char MosaicFlag20; /该相关站点数据是否包含在本次拼图中,未包含:0,包含:1, 20字节/数据类型定义,版本号为.=1.5short m_iDataType; /0-unsigned char 1-char 2-unsigned short 3-short 4/每一层的向量数,版本=2.0short m_iLevelDimension;charReserved168;接下来是数据块,从底层到高层进行排列共ZnumGrids层。一个字节存储一个数据,值的范围0-255,2*dBZ+66等于该字节的值。每层的数据从起始点(左上角)开始,按维向(纬度y)减小写每行的经向(经度x增大)数据。具体数据的记录值约定:组合反射率、CAPPI率数据值为单字节,范围0-255,2*dBZ+66等于该字节的值。回波顶高、垂直液态水含量、垂直液态水含量密度、一小估算降水等数据为两字节整数(short int),回波顶高单位为0.1 km,垂直液态水含量单位为0.1 kg/m2,垂直液态水含量密度单位为0.1 kg/m3,一小估算降水单位为0.1 mm,范围0-203(大于203的全部等于203)每层的数据从起始点(左上角)开始,按维向(纬度y)减小写每行的经向(经度x增大)数据。其他产品存储的必须为实际值,存储和实际值之间不得再有转换的公式。3、自动站时序数据自动站时序数据是二进制格式,包含了若干时长的自动站数据,文件首先包含文件头:typedef struct tagSerialFile15 char szFlag16;/标记=SwanCycle short nVer;/版本=15 2011年月日从Int改为Short型int nDataOffset;/数据区开始的位置,从文件头开始计算 short nIndex;/2011年月日增加了最新记录的索引号 char szRecordTime16;/记录时间int nRecordInterval;/标准的观测间隔 int nTotalTime;/记录时长 int nTotalSta;/站点的个数 int nRecordSize;/每个站点记录长度 SERIALFILE15;然后从nDataOffset的位置开始存放自动站的站点数据,每个站点的数据长度为nRecordSize。每个站点保存了站点数据,每个数据指针包含了若干个时次的数据,具体个数由nTotalTime和nTotalTime决定,结构如下:typedef struct tagAwsInfoSerial STAINFO sta; float* fWindDir_2Min;/2分钟平均风向 float* fWindSpd_2Min;/2分钟平均风速 float* fWindDir_10Min;/10分钟平均风向 float* fWindSpd_10Min;/10分钟平均风速 float* fWindDir_Max;/最大风向 float* fWindSpd_Max;/最大风速 char* szWindTime_Max;/最大风速时间,以个字节为一段 float* fRain; float* fRain_PerMin;/分钟雨量,申请数为保留小时*60 float* fTemp;/温度 float* fTempHigh;/最高温度(1小时内的) float* fTempLow;/最低温度(小时内的) float* fTempLd;/露点温度 float* fXdsd;/相对湿度 float* fQy;/气压 float* fNjd;/能见度 AWSINFOSERIAL;其中站点信息的子结构定义如下:typedef struct tagStaInfo int nStaId; /站号 char szStaName32;/站名 char szCity32;/所属地市名 float fLon;/经度 float fLat;/纬度 float fHei;/高度 int nLevel;/级别 STAINFO;5、 子系统介绍目前的服务器中的子系统包含了:雷达拼图和外推、自动站处理、云图识别、清理、雷达资料处理、FTP传送。市级模式只是把线程进行不同分组,用户可根据具体的需求重新配置1、雷达拼图和外推子系统主要处理雷达资料,该系统包含的程序和作用如下:Rdfile:寻找符合拼图条件的雷达资料Rdqc:对找到的资料进行质量控制Rdmosaic:三维拼图处理Rdqpehour:使用找到的雷达资料计算整点的1小时降水估测Rdqpe60:使用找到的雷达资料进行6分钟滚动的1小时降水估测Radapcal:进行面雨量累计计算Radapwarning:进行临界面雨量计算和报警GetRefFileName:为trec程序查找最新的拼图数据cotrec:trec计算和回波外推SCIT.exe:风暴识别TRACK.exe:风暴追踪GetQPFNeedFile.exe:为QPF程序查找最新的数据qpf.exe:使用广东的方法QPF计算zrqpf.exe=使用湖北的ZR关系进行QPF计算GetREFFSTVERIFYNeedFile.exeGetQPFVERIFYNeedFile.exeGetSTMVERIFYNeedFIle.exe上述程序为得到检验要的文件STM_VERIFY.exe:风暴追踪检验QPF_VERIFY.exe:QPF检验REF_FST_VERIFY.exe:回波外推检验TITAN:TITAN风暴追踪dbdetect:夏季保留检测radarwarning:雷达回波报警2、实时报警主子系统主要是负责自动站处理和部分雷达产品radforecast:雷达风暴特征量报警awsnew:将自动站处理成时序格式awsalarm:使用时序数据判别报警awsareaprecipitation:使用克里金方法对自动站小时雨量进行格点化awsapcal:使用自动站格点化雨量计算面雨量awsapwarning:使用自动站格点化雨量计算临界面雨量并报警3、云图识别子系统目前只有对流云识别一个模块:GpfConvection3、雷电资料处理子系统把雷电观测转为MICAPS可以显示的格式,当前就一个模块:lightningtran5、清理子系统对资料进行清理操作,目前就一个模块:fileclean6、FTP分发子系统定时收集产品目录下的tmpfilenotify目录下的列表,把数据发送到指定的ftp6、 模块二次开发标准服务器模块开发即是在SWAN产品服务器中的某一个线程中添加一个新的控制台程序。需要遵循一下的规范:1.模块和相关文件的要求模块以控制台程序方式提供,即常说的DOS程序,原则上要求算法部分要求以标准C/C+ 或者Fortran实现,不设计第三方的类库。但也可以使用跨平台支持的类库。一个标准模块包含如下几个部分:主体可执行程序,配置文件,配置帮助文档,用户说明文档。文件命名规则:配置文件为可执行程序的同名ini文件,帮助文件为同名的html文件。即可执行程序为example.exe的话配置文件为example.ini,帮助文件为example.htm。配置文件格式要求:配置文件需为标准的ini文件,ini文件包含三个段,段名固定:路径设置,计算参数,附加设置。路径设置段主要是模块的输入输出目录类的设置,这段通常会被统一包装的设定向导更改。计算参数段记录模块计算用的阈值。附加设置记录一些其他的参数,主要是控制参数。Ini的段名和键名都要求为中文描述,另外可以使用“#”或者“;”做为注释行。配置帮助格式要求:配置帮助文件要求是标准的html格式,后缀使用“htm”,编码使用UTF-8,帮助文件应包括模块的大致描述,每个参数的含义。使用帮助文件的可以在ini文件中不加注释行。模块生成的日志文件的要求:模块需要将运行状态写成日志文件,日志文件存放在log目录下,命名为模块同名的log后缀。Log格式必须为文本格式。具体要求:分为正常运行日志,出错日志,分别为“程序名YYYYMMDD.log”和“程序名YYYYMMDDerror.log”,比如cotrec.exe分为cotrec20100101.log和cotrec20100101error.log。基本要求正常运行日志记录程序是否运行过的信息,出错日志记录程序计算中的错误和不满足的计算条件,要便于集中查找错误发生的原因和时间,基本内容包括:查找输入文件:是否找到需要计算的文件,不存在路径的话放入到错误日志中。分析计算条件的状态:是否符合计算的要求,缺乏的计算条件放入到错误日志中(缺站,匹配不满足等信息)。计算过程:各个产品的计算标记,如果程序出错,可以快速定位哪个产品错误。输出状态:各个产品的输出标记,如果出错,可以快速定位未输出的产品。其他必要的信息:根据自己具体的情况,输出其他有助于判断程序运行状态的信息。日志格式为以 YYYY-MM-DD HH:mm:SS的格式输出时间开头,尽量使用中文内容输出。产品文件命名:进入SWAN系统的产品由开发组统一分配,基本命名规则是:二进制:Z_SWAN_SUBSYSTEM_PRODUCT_YYYYMMDDHHmmSS_PARAMS.bin文本:Z_SWAN_SUBSYSTEM_PRODUCT_YYYYMMDDHHmmSS_PARAMS.txt2.系统交换约定和临时文件规则框架和模块之间的信息交换通过管道重定向和文件交换两种方式。模块运行过程中以printf输出的语句都会被重定向到框架的运行状态输出中。由于模块并不是一直加载在内存中等待运行的,只是在满足触发条件的时候才运行,当涉及到前后时次的资料时需要把上次计算的状态记录下来,在下次运算的时候加载,有的模块会计算生成一些临时文件,但是在计算结束后需要删除,临时文件tmp是模块存放临时文件的地方,临时文件分为托管和自主两种。托管的文件在一个线程计算周期开始前会被系统删除,自主临时文件由模块自主管理,只会在用户手工执行清空临时文件夹时被删除。托管临时文件命名规则:符合模块名+”*.*”命名规则的文件均属于托管文件,比如模块名为example.exe,那么其在临时目录下生成的exampletmp.txt,exampleparam.txt这类文件都属于托管临时文件,这些文件在example.exe所在的线程运行开始时对上一周期的临时文件会被删掉。凡是不符合该命名规则的均属自主临时文件,除了手工清除命令,框架不会在任何时候删除这些文件,多个资料计算的中间状态的文件都应该是自主临时文件,由模块自己决定把保留和删除的时间结果通知临时文件:结果通知临时文件是模块将生成的结果告诉主框架发送到时建立的通知文件,该文件名固定是模块名+”list.txt”,即example.txt的通知文件名为examplelist.txt,此文件名符合托管规则,因此会在被系统自动清理。该文件格式第一行为此次生成的文件数量,下面每一行一个文件全路径。注意(重要):文件的唯一性和关联性为保证每个模块可以简单的复制后作为同样处理性质的另一个程序使用,所有于该模块相关的、可能随模块更改的配置文件,数据文件,托管和非托管临时文件均需要和模块名关联,保证该模块被复制后两个模块不会使用同一个配置或者数据文件。举例:sample.exe,对应的配置文件sample.ini,托管临时文件sample.tmp,非托管文件sample.tmp,对应站点数据文件sample.dat,日志文件sample20100501.txt。如果复制sample1.exe,那么只需要将相应的配置,数据文件复制为sample1.ini,sample1.dat,sampe1.txt自动识别这两个文件,日志文件会自动改成sampl120100501.txt,临时文件会读取sample1.tmp和sample1.tmp,不会干扰原有模块。其他可以共享的数据文件可以不用和程序名相关。因此收到影响的数据输入输出目录修正方案:如上所述,复制后的两个程序默认会公用同一个输入输出,如果涉及到了多个分支需要子目录,此方案会产生冲突,因此在附加参数设置添加一个新键值:固定名字为”区域输入子目录=“和”区域输出子目录=“,如果该键不存在或者为空,则产品输出不添加子目录,否则在当前路径配置的输入输出基础上,添加该子目录段,在系统注册路径中添加新输出目录,此项需要手工配置。对于需要文件列表和生成文件列表的在附加设置添加固定键值”输入文件列表=“和“输出文件列表=”,复制程序时此项需要手工修改。3.模块的附属支持对于C/C+的模块,系统额外提供部分设计到系统和文件读写的支持,这些支持包括ini文件的读写,目录搜索等。其中ini文件读写类可以通用,其他附属支持均是基于Qt库的工程,如果模块开发是基于MFC的控制台程序,则无法使用这些库。4.模块的运行流程框架的运行是以线程为单位,每一个线程中有数个模块组成的执行序列(也可以是一个),即把互相依赖的一系列可执行程序作为一个串,先后执行,一个线程从头到尾执行完一个串称作一个运行周期。框架在满足条件的时候启动模块所在线程,首先上一周期生成的符合托管的临时文件都被清空,依次将每一个模块的工作目录设定到框架所在目录,然后运行模块,并将模块通过printf输出的信息显示在该模块所在线程输出窗口上,模块运行结束后,如果存在通知list临时文件,则读入里面的条目,把这些文件的路径发送到客户端,然后删除通知文件。在一个运行周期运行结束后,线程挂起等待下一个触发条件。线程和模块的流程图:5.线程组的分配原则和线程模块间通讯结果互相依赖的模块组成一个线程组,在线程组中依次执行,统一线程组第一个模块为文件搜

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论