实例

此部分使用 ZOO-API , the ZOO-Project 服务器端Javascript API。

zoo-api包含许多类和函数。您可以找到描述列表 here .

动物园.流程示例

function SampleService(conf,inputs,outputs){
   var myProcess = new ZOO.Process('http://localhost/cgi-bin-new1/zoo_loader_new1.cgi','Boundary');
   var myInputs = {InputPolygon: { type: 'complex', value: '{"type":"Polygon","coordinates":[[[-106.993853,35.998758],[-107.407233,35.997524],[-107.430525,35.997726],[-107.4824,35.99878],[-108.37013,35.999472],[-109.043633,35.996652],[-109.096265,35.997817],[-109.148763,36.001751],[-109.200981,36.008442],[-109.252775,36.017871],[-109.304,36.030014],[-109.354516,36.044835],[-106.468201,35.991497],[-106.855511,35.989504],[-106.90933,35.990676],[-106.963008,35.994743],[-106.993853,35.998758]]]}', mimeType: "application/json"} };
   var myExecuteResult=myProcess.Execute(myInputs);
   return {result: ZOO.SERVICE_SUCCEEDED, outputs: [ {name:"Result", value: myExecuteResult} ] };
}

在这个非常简短的示例中,您可以看到如何创建 ZOO.Process 类实例并对此类实例调用Execute方法。然后您只需要返回一个包含属性result和outputs的javascript对象,我确信您已经知道这是怎么回事了。第一个是关于进程的状态(可以是 ZOO.SERVICE_SUCEEDEDZOO.SERVICE_FAILED 等等),最后一个显然是生成的映射(请看一看动物园内核在 service.h

zoo.updateStatus示例

function SampleLongService(conf,inputs,outputs){
   var my_i=0;
   while(my_i<100){
       try{
         conf["lenv"]["status"]=my_i;
       }
       catch(e){
       }
       ZOOUpdateStatus(conf,my_i);
       SampleService(conf,inputs,outputs);
       my_i+=10;
   }
   return SampleService(conf,inputs,outputs);
}

在这个示例代码中,您可以看到如何使用 ZOOUpdateStatus 函数更新正在运行的进程的当前状态。当zoo内核以后台模式运行javascript服务(如果用户设置为 true 这个 storeExecuteResponse 请求中的参数)。

异步动物园。过程例子

function RunAsynchonous(conf,inputs,outputs){
   var formatWPS=new ZOO.Format.WPS();
   var myProcess = new ZOO.Process(conf["main"]["serverAddress"],'Demo',true);
   var myExecuteResult  =myProcess.Execute(myInputs,myOutputs);
   var response=formatWPS.read(myExecuteResult);
   while(response.status){
       sleep(1500);
       var response1 = ZOO.Request.Get(response.status.replace(/amp;/g,""),null);
       response=formatWPS.read(response1);
   }
   conf["lenv"]["message"]="Asyncrhonous Process ended";
   ZOO.UpdateStatus(conf,90);
   return {result: ZOO.SERVICE_SUCCEEDED, outputs: outputs};
 }

在这个示例代码中,通过创建动物园。过程,如果第三个参数设置为true,我们将确保WPS服务执行将异步运行。一旦获取executewps响应,直到服务执行结束,每隔1,5秒轮询一次statusLocation。