• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
     
    GVOS 8.2 SP1 (ADL)& CT ADE 結構
    (一)
     

     

    1. Dialogic CT ADE

      任何CT應用的核心都是語音卡。語音卡就是類似于以太網卡或聲卡的一個PC擴展卡,具有語音處理的功能。支持多種PC總線:ISA(16bit,8 Mhz)和PCI(33 MHz)。具有模擬和數(shù)字兩種網絡接口。模擬接口為RJ-11口,數(shù)字接口為E-1口(EE.UU. 為T1口)或者為ISDN 端口(PRI或BRI)。
      另一個重要的概念是語音總線,語音總線可以使資源共享。語音卡附帶基于C/C++環(huán)境的DLL的API。C/C++語言通常是用于復雜的底層應用開發(fā)的語言(S.O. , 設備驅動程序等等)。C/C++代碼的維護和編寫都比較容易。
      Dialogic的 CT ADE 的基本目的是幫助開發(fā)者縮短開發(fā)流程,它是一種易用、功能齊全、工業(yè)級的軟件開發(fā)環(huán)境。

    2. 介紹

      CT ADE - 圖形化的 VOS 8.2 SP1,是Dialogic 最新版本的電話應用開發(fā)工具。這些工具包括信息流圖產生器,VOS源碼編輯器,VOS源碼編譯器,VOS 源碼單步調試器和信號量(Simaphore):一個可以使用任何windows 聲音設備(比如聲霸卡)的電話線模擬器。所有的這些工具都集成在一個單一的開發(fā)環(huán)境中:CT ADE。

     2.1 Dialogic 商標名稱

      Since the acquisition of Dialogic over Parity Software,本產品不斷更新,請參照下表熟悉新的用語:
    Graphical VOS-應用開發(fā)語言(ADL)
    CallSuite - 應用開發(fā)Activex組件(ADX)

    3. CTADE,第一步:安裝


      首先必須安裝 CT ADE,首先把CD(自動運行的CD)放入光驅,屏幕上會彈出下列菜單:我們安裝了帶有 CTADE 體系結構引擎的VOS。

    4. CTADE,圖形化的VOS

      安裝完圖形化的VOS后,可以看到下面的菜單:

      接下來必須設置CTADE_A層,以便可以檢測到系統(tǒng)中安裝的Dialogic驅動和板卡(R4,S.100, 等等)。CTADE_A可以通過運行TopazProfile.exe檢測到Dialogic的設置。
      只要我們做了這樣的檢測(第一次和每次通話設置改變以后)。就可以使用帶有CTADE_A的圖形化的VOS了。
      下面討論Graphical VOS的重要特征以及如何利用此工具得出最佳的結果。

    5. VOS語言參考


     5.1 什么是VOS?

      VOS(Voice Operative System) 是包括:
      ·腳本語言
      ·VOS 語言編譯器
      ·VOS 代碼運行

     5.2 第一個VOS程序 

      我們先看一個VOS的例子程序:
      program
      vid_write("I am a VOS program!");
      vid_write("Type any key to exit...");
      kb_get();
      vid_write("Exiting now.");
      endprogram


      為了證明VOS的多任務運行的能力,下面看一個兩程序并行運行的例子。
    下面程序在屏幕上顯示一個簡單的時鐘,每秒鐘刷新:
      program
       for (;;)
        vid_cur_pos(0, 50);
       vid_print(time() & " " & date());
       sleep(10); # Wait one second
       endfor
      endprogram

      下面在運行這兩個程序的同時運行第三個程序:
      program
       spawn("clock");
       spawn("hello");
      endprogram

    6. VOS語言

      本章中我們簡要的回顧一下VOS語言的重要的概念。
      VOS語言專門用于進行呼叫處理,是一種易學、健壯、運行快速的語言。例如,沒有動態(tài)內存分配,因此系統(tǒng)不會內存不足。VOS語言比VB簡單,更比C/C++簡單得多。

     6.1 源代碼

      VOS是一種字母大小寫敏感得語言,語言的所有組成部分都區(qū)分大小寫。
      源代碼中的注釋可以用"#"字符標識(這是一個所謂的"英鎊"符號,在英語PC中顯示為? 或者非英語PC中顯示為其他特殊符號,ASCII碼為35,十六進制為23h)。注釋一直到此行結束。
      除非作為注釋行,否則行結束符沒有特殊的語法規(guī)定,多條語句可以寫在同一行內。但不提倡這樣寫,因為這樣會使源碼難以理解。
    一個VOS程序的源代碼如下所示:

      <variable declarations>
      program
        ...any number of statements...
      endprogram
      <onsignal declaration>
      <function declarations>

      <declarations>部分定義了程序中所用的變量和常量。可以包括多個dec…enddec 塊,這些程序塊可以在endprogram塊的前面或后面,也可在任何endfunc塊的前面或后面。
      一個完整的VOS程序如下所示:
      dec
        var line : 2;
        const MSG = "C:\MSG\message.vox";
      enddec

      func Message()
        MediaPlayFile(MSG);
      endfunc

     6.2 數(shù)值

      VOS中的所有的數(shù)值都以字符串的形式保存。字符串以雙引號表示,如下所示:
    "This is a string "

      6.2.1. 數(shù)字值

      數(shù)字由十進制的字符串表示,例如,123由字符串"123"表示。數(shù)字字符串在書寫時可以省略雙引號,所有"123"和123表示相同的數(shù)值。

      6.2.2. 邏輯值

      邏輯值"真"和"假"也是由字符串表示,"假"由空字符串表示,記為"","真"由"1"表示。

     6.3 變量

      變量名就是一個字符串,當VOS開始運行或者重啟時,所有的變量均置為空字符串。
      變量長度有限制,如果字符串的長度大于最大長度,則按最大長度取值。如果在調試模式下運行VOS,當一個字符串被截短后會彈出一個警告信息。(如果要避免這些告警,賦值時使用substr函數(shù))

      為什么要對變量限定最大長度?為什么VOS不運行動態(tài)分配內存?主要是因為呼叫處理系統(tǒng)常常在無人維護的狀態(tài)下運行數(shù)天、數(shù)星期或者數(shù)個月。設計VOS時避免使用內存動態(tài)分配是為了防止內存碎片和內存不足等問題,這也是為VOS設計一種新的語言而不使用現(xiàn)存的語言的原因。
      變量在使用前必須聲明(給定變量名和最大長度),變量可以在兩個地方聲明:主程序運行前或者函數(shù)內。一個帶有變量聲明塊的例子程序如下:

      此例中定義了兩個變量:一個為x,長度為2個字符,一個為y,長度為3個字符。
      變量名必須以字母開始,可以包括數(shù)字(0…9)、下劃線(_),變量名長度不限。VOS語言區(qū)分大小寫,所以X和x代表兩個不同的變量。

      必須注意符號表的概念,VOS符號表不分級別,也就是說函數(shù)名是全局的,并且變量名在整個任務中均可見:
      dec
       var x : 2;
       var y : 3;
      enddec
      program
       x = 12;
       y = 123;
       y = "Too long"; # y 變成 "Too"
      endprogram

      func suma(a,b)
      dec
       var x:2; <<<< - ----- 編譯錯誤
      enddec
       x = a+b;
       return x;
      endfunc

     6.4. 數(shù)組

      數(shù)組是以同一名字(標識符)表示的一組字符串。
      一個數(shù)組是指一個或多個變量,這些變量長度相同,名字相同。數(shù)組中不同的變量靠下腳的標號來標識。比如,有一個名字為a,包括三個變量的數(shù)組,如下所示:
      a[1],a[2],a[3]
      這三個變量可以分別賦值,分別使用。例如:
       a[1] = "Hello";
       x = a[3];
       spk_num(a[2]);

      數(shù)組和變量在相同的地方定義。
      一個數(shù)組定義的例子如下:
       dec
        var Arr[1..10] : 8;
       enddec

      數(shù)組的索引可以使用任何表達式。
      一般來說,數(shù)組定義方式為:
      <ArrayName> [ <MinIndex> .. <MaxIndex> ] : <MaxLen>
      數(shù)組索引必須在0….255.范圍內,也就是說<MinIndex>和 <MaxIndex>范圍為0…255。
      一個程序中定義的數(shù)組個數(shù)不能超過255。
      對于更大的數(shù)組,強烈建議使用glb_dimx來實現(xiàn),使用動態(tài)內存分配,以后再討論。

     6.5 常量,介紹


      常量是指VOS使用的固定值,由字符串表示,字符串通常由雙引號括起來:
      "This is a string"
      如果字符串中的所有字符都是十進制的數(shù)字,則雙引號可以省略,"123"和123表示相同的字符串。注意,由于此規(guī)則,-123表示一個單一的負號和一個常量字符串"123",而"-123"表示一個長度為4個字符的常量字符串。
      一個字符串中,后半個單引號,',具有特殊的意義。符號,',及其隨后的字符的含義如下所示:

     序列 此單個字符在字符串中的意義
     ''  單個后向單引號'
     'q  雙引號"
     'r  回車(十六進制 0x0A)
     'n  換行(十六進制 0x0D)
     't  Tab (十六進制 0x09)
     'xx  十六進制字節(jié)xx,比如'09與't相同,但'00非法。

      在一個dec…..enddec塊中,可以為一個常量取一個名字。Dec … enddec塊可以放在主程序的前面,這種情況下,所聲明的常量可以在整個程序中使用。如果Dec … enddec塊在一個函數(shù)前面,則所聲明的常量只能在此函數(shù)內使用。當VOS開始執(zhí)行程序時和重啟時,所有的變量均設置為空字符串。
      一個典型的聲明塊如下所示:
      dec
        var <name> : <length>, <name> : <length> ... ;
      …..更多的變量聲明….
        const <name> = <value>, <name> = <value> ... ;
      …..更多的常量聲明….
      enddec


      比如:
      dec
        const MAX_LINES = 24;
      enddec

      定義一個常量MAX_LINES表示兩個字符的字符串"24"。
      此定義之后,當程序中要使用"24"字符串時,就可以用MAX_LINES代替。
      可以用常量表達式為常量名賦值,常量表達式就是由常量字符串、運算符和括號(但不能包括函數(shù)調用)組成的表達式。例如:

      可以通過-D命令行傳遞給Vlc的常量也可以用于常量表達式。
      看另一個常量,
      const LOCAL_AREA_CODE = 415;
      在此定義下,程序中要使用常量415時,就可以用LOCAL_AREA_CODE代替。這種用法有兩個好處,首先,當程序需要改變時,比如程序要在紐約運行,即     LOCAL_AREA_CODE要改變,則程序中只需要改動一處:
      const LOCAL_AREA_CODE = 201;

      習慣上常量名一般使用大寫字母,但VOS或vlc中可以不遵循此慣例。

     6.6. 算術表達式

      VOS中可以使用以下基本算術表達式:

      運算符有不同的優(yōu)先級,例如,乘法的優(yōu)先級比加法高,所以在表達式A+B*C中,先計算乘法B*C,乘法結果再與A相加。可以用園括號(…)改變優(yōu)先級,比如表達式(A+B)*C中,先計算加法。

      重要提示:

      算術運算由VOS采用32位整數(shù)的精度進行運算。如果結果中包括10個或10個以上十進制位,則結果可能是錯誤的。如果數(shù)值的精度超過32位,VOS不會產生警告或錯誤的信息。
      因為VOS內部采用32位的精度,VOS中數(shù)值的范圍是-231~231-1,即:
       -2147483648 to 2147483647
      因此可以表示所有9位的十進制數(shù),但是大部分10位的十進制數(shù)都不能表示。也就是任何兩個9位的十進制數(shù)字都可以相加,并且結果正確,所以
       999999999 + 888888888
      可以得到正確的結果,但是:
       (999999999*5)/4
      不能得到正確的結果,因為運算中乘法的結果超過32位的精度。

     6.7.帶小數(shù)點的算術值

      VOS還沒有處理定點或浮點小數(shù)的內置函數(shù)。可以免費得到支持DOS和Windows的FP RLL,可以提供十進制小數(shù)運算函數(shù),如fp_add, fp_sub 等等。

     6.8. 邏輯條件

      VOS提供了邏輯運算符(與,或,非)和關系運算符(大于,小于…),運算結果為邏輯值(true和false),真由"1"表示,假由""表示,兩個邏輯值的邏輯運算符如下:

      關系比較運算符:

      例如:
       "001" eq "1" True
       "001" streq "1" False !!!
       "*" eq "#" True !!!

     6.9. 賦值運算


      運算符=(賦值)是一個特殊的運算符。左邊必須是變量(或數(shù)組元素)。右邊可以是任何表達式。下面是正確的賦值運算的例子:
        x = 1;
        Month = 3;
        MonthName = "March";
        TotalSeconds = Hours*3600 + Mins*60 + Secs;

      除此以外還有下列賦值運算符:+=,-=,*=和/=。最常用的運算符是+=,可以解釋為相加后賦值,例如:
        n+=1;
      表示n加1。先把右邊的表達式計算出結果,此值加左邊的變量。同樣,-=是相減后賦值。因為加1和減1的運算比較頻繁,所以提供了++和-這兩個運算符,如下所示:
        x++ x加1,(x++)取x加1前的值。
        ++x x加1,(++x)取x加1后的值。
        x-- x減1,(x--)取x減1前的值。
        --x x減1,(--x)取x減1后的值。

      如果只是對一個變量進行加1或減1的運算,就不需要考慮運算前后的值。比如,下面兩個運算式等價:
        x++;
        ++x;

      這兩個運算結果相同,如果運算的結果在后續(xù)的運算中使用,例如:
        x = 8;
        y = x++; # y=8, x=9
        x = 8;
        y = ++x; # y=9, x=9

      可以看出,計算結果中y的值不同,如果用戶感到類似+=、++等運算比較容易混淆,可以不使用它們,使用=運算符也可以達到相同的結果。如果你是C語言程序員,就會發(fā)現(xiàn)這些運算符比較方便。

      6.10. 字符串連接

      &運算符將其左右的兩個字符串合在一起,連成一個字符串,稱為字符串連接。例如,"A" & "B"的結果是"AB"。看另一個例子:
        FirstName = "Joe";
        LastName = "Smith";
        FullName = FirstName & " " & LastName;
        FullName的值為"Joe Smith";

      要點:
      注意字符串連接是優(yōu)先級比較高的運算,當與算術運算符一起使用時,可能會出現(xiàn)一些微小的錯誤,看下面的例子:
      表達式:
        x = "Result is " & 2*2;
      的結果為x="0",這是因為&的優(yōu)先級比*高,所以先進行連接字符串的運算:
        x = "Result is 2"*2
      但字符串"Result is 2"轉換為數(shù)字時為0(因為第一個字符不是數(shù)字)。所以最終結果為0*2=0。如果要先進行乘法運算,可以使用圓括號。
        x = "Result is " & (2*2);

      6.11. 循環(huán)

      循環(huán)就是重復運行一條或多條語句,VOS語言包括三種循環(huán):for,do…until和while。可根據自己的風格選用,任何循環(huán)操作都可以由這三種循環(huán)完成。
      用法如下:

        for (initialize ; test ; increment)
          statements
        endfor

        while ( test )
          statements
        endwhile


      程序中斜體字使用相應的代碼:
        statements
      循環(huán)重復運行一條或多條語句,可能運行0次或多次。
        initialize
      循環(huán)開始前運算的表達式。在for循環(huán)中,如果不需要可以為空。
        test
      一個邏輯條件,每次循環(huán)都檢查邏輯結果,決定是否進行后面的循環(huán)操作。For和while-loop循環(huán)中,每次循環(huán)前檢查條件,如果結果為真,則繼續(xù)循環(huán),如果第一次檢查結果就為假,則循環(huán)的語句永遠不會運行。Do…until循環(huán)中,循環(huán)操作一直運行,直到條件成立。For循環(huán)中,此條件可以為空,這種情況下條件永遠為真,循環(huán)操作永遠進行,或者通過goto,jump或return語句退出循環(huán)。
        increment
      for循環(huán)中,每次循環(huán)后計算此表達式,如果第一次test條件為假,則此表達式永遠不會執(zhí)行。For循環(huán)中,此處可以為空。
      最常見的循環(huán)是變量從1開始,直到上限,即最大值。下面循環(huán)使用變量n計算1+2+….+Max的和,

     

      無窮循環(huán)(或通過break退出)可以用for循環(huán)實現(xiàn):
        for (;;)
         # ...
        endfor

      或while循環(huán)實現(xiàn):
        while (1)
         # ...
        endwhile

      條件真用"1"表示,所以條件永遠為真。

     6.12. 函數(shù)調用

      一個函數(shù)是指一組語句序列,具有函數(shù)名和返回值。一個函數(shù)可以有一個或多個參數(shù)。參數(shù)在函數(shù)內可以當作變量一樣使用,但不能為其賦值。
      VOS中有三種函數(shù):

    • 內置函數(shù)。這些函數(shù)是固化到VOS和vlc中的函數(shù),因此程序中總可以使用這種函數(shù)。
    • 用戶定義函數(shù)。用VOS源碼編寫的程序。
    • RLL程序。這些函數(shù)是用C或C++編寫的。以二進制文件的格式載入,稱為運行連接庫(RLL)。DOS中,RLL是駐留內存程序,Windows中,RLL是動態(tài)連接庫(DLL)。


      這三種函數(shù)的調用方式完全一樣,調用方式是函數(shù)名,后面為括號中的參數(shù),參數(shù)由逗號分開。即使函數(shù)沒有參數(shù),括號也不能省略。下面是一些函數(shù)調用的例子:
        vid_write("Hello"); # 內置函數(shù)
        MyFunc(); # 用戶定義函數(shù)
        code = Fquery(queue, index); # RLL函數(shù)

      因為用法幾乎相同,所以不能從調用方式中區(qū)分內置函數(shù)、用戶自定義函數(shù)和RLL函數(shù)。
      一個表達式中含有函數(shù)名時,先執(zhí)行函數(shù)(調用函數(shù)),得到返回值,表達式中使用函數(shù)返回值。
      所有的函數(shù)都有返回值,如果函數(shù)中沒有指定返回值,則返回空字符串(不包含字符的字符串"");許多函數(shù)都不返回有用的返回值,比如vid_write總是返回空字符串。如果返回值在語句中沒有使用。比如:
        vid_write("Hello"); #返回值沒有使用
      VOS忽略返回值。如果返回值有用,返回值可以用在表達式中。例如,假設函數(shù)MyFunc需要兩參數(shù),返回一個數(shù)值,則下列語句為正確的:
        MyFunc(1,2);#忽略返回值
        x=MyFunc(1,2);#返回值賦值給x
        y=x*MyFunc(1,2)+z;#表達式中使用函數(shù)返回值

      函數(shù)的參數(shù)可以是常量、變量和表達式,下面語句是正確的:
        MyFunc(1, 2); # 常量
        MyFunc(x, y); # 變量
        MyFunc(z, y+123); # 表達式
      函數(shù)參數(shù)中的表達式本身可以包含函數(shù)調用。類似于VOS語言中的其他特性,VOS允許多重遞歸調用。

     6.13. 函數(shù)和庫文件

      VOS中有多種管理用戶函數(shù)的方法:函數(shù)文件和庫函數(shù)文件。
      函數(shù)文件一般都是文本文件,文件名為函數(shù)名,擴展名為.FUN。例如:
      文件->add.fun
        func add(arg1,arg2)
          return arg1+arg2;
        endfunc

      庫函數(shù)文件的擴展名為.vl。這種文件是一組函數(shù)(.FUN)的集合。可以使用mkvl命令生成這種庫函數(shù)文件,并可以加密。
       mkvl <fich. Definition> <file lib>
      定義的庫文件為文本文件,含有.FUN文件索引。
        func1.fun
        func2.fun
        \PROJ\FUNCS\LongFunctionName.fun
        E:\SHAREDF\PROJ\OtherLongName.fun

     6.14. 包含文件

      一個源碼文件可以使用include語句來包含另一個文件的所有內容。這種方式一般用來包含標準的常量定義。例如:
       dec
         include "project.inc"
         var MyVar : 2;
        enddec

     6.15. 內部函數(shù)

      VOS包含了眾多的內置函數(shù),這一部分我們對重要的一些函數(shù)組進行簡要地介紹:

      6.15.1. 數(shù)據庫函數(shù)


      db_函數(shù)支持dBase兼容的DBF數(shù)據庫以及Clipper兼容的NTX索引。程序運行中可以打開和關閉數(shù)據庫,一個任務可以同時打開多個數(shù)據庫。支持多用戶文件和記錄表鎖定。可以通過RLL操作其他類型數(shù)據庫,操作細節(jié)隨操作系統(tǒng)不同而變化。
      建議使用我們的數(shù)據庫操作RLL,象可用于任何系統(tǒng)的AdoRll。AdoRll可以通過SQL語句操作數(shù)據庫服務器(Informix,Oracle,SQLServer等等)。

      6.15.2. 串口通信


      ser_ functions支持通過COM1~COM4的RS-232串行通信。

      6.15.3. 任務管理


      有許多任務管理的內置函數(shù),包括spawn,chain,exec,arg,getpid和kill。

      6.15.4. 任務間通信

      VOS提供了任務間通信的四種方法:全局變量 (glb_functions),信號量 (sem_ functions), 消息 (msg_ functions)和 分組 (grp_functions)。
      在手冊中后面介紹這些方法。

      6.15.5. 字符串處理

      有許多種處理字符串的函數(shù),包括length,substr和許多其他的函數(shù),參照字符串函數(shù)。

      6.15.6. 屏幕和鍵盤

      vid_和kb_函數(shù)提供了簡單的屏幕輸出和用戶輸入的方式。在Windows下,你也許想要制作圖形用戶界面,可以通過使用NetHub ActiveX組件在Visual Basic,Delphi,Visual C++或其他Windows可視化工具下制作用戶界面。

     6.16. 外部函數(shù)

      VOS的所以外部函數(shù)都是在C/C++下開發(fā)的。這些函數(shù)是帶有特殊入口的DLL。VOS通過入口調用DLL的內部函數(shù)。我們常稱這些DLL為RLL(運行連接庫)。我們提供了C/C++開發(fā)包,用戶可以使用任何Windows的C/C++編譯器(Visual C++,Borland C++,C++ Builder等等)開發(fā)自己的RLL。
      下面介紹一些最常用的RLL。

      6.16.1. NetHub Plus RLL


      NetHub Plus是一個企業(yè)化的組件,它支持進程中線程間的通信,這些進程包括PC中單個進程或局域網以及廣域網上節(jié)點中的單個進程。
      NetHub Plus既可以作為ActiveX控件使用,又可以作為VOS RLL使用。
      NetHub Plus的一個例程可以與NetHub Plus的一個或多個其他例程通信,這些例程可以是在同一臺PC上或同一網絡上。
      VOS RLL為每一個VOS任務載入一個單獨的NetHub Plus ActiveX組件例程。

      消息
      NetHub Plus的任何例程之間都可以收發(fā)消息。消息是一個字符串,最大長度為127的字符,可以通過MsgGet方法接收,或者通過MessageReceived事件接收。

      信號量(Semaphore)
      可以使用信號量來保護共享資源和代碼的關鍵部分。一個信號量是一種特殊的變量,有兩種可能值:設置或清楚。如果一個NetHub Plus例程設置了一個信號量,直到這個例程清除,其他的例程都不能設置。信號量只能由設置它的例程清除。

      共享的網絡變量
      共享網絡變量包含網絡上任何NetHub Plus的例程都可以訪問的數(shù)據。網絡變量由變量名和索引號組成。索引與數(shù)組下標相似。共享的網絡變量的最大長度為127個字符。
      信號量(Semaphores)和網絡變量都由名字區(qū)分,名字是一個長度為1到127的字符串。第一個字符必須是字母或下劃線,其他的字符可以是字母、下劃線或數(shù)字。

      6.16.2. Ado RLL

      ADORLL是一種可以通過ADO或者ODBC可以直接訪問數(shù)據庫服務器的RLL。
      強烈建議使用ADO Ole DB提供連接 ,盡量不要使用ODBC提供連接,因為穩(wěn)定性和性能都不太好。

      6.16.3. Socket RLL

      IP網絡上運行的VOS任務可以通過Sockets RLL交換消息,IP網可以是企業(yè)內部網、因特網、運行TCP/IP的Novell網或任何支持IP的其他網絡。
    RLL只是支持Windows NT,不支持Windows 9x。
      缺省Socket RLL使用端口2222(十六進制 0x08AE),可以通過 ws_SetRemotePort函數(shù)來改變連接端口號。

      6.16.4. Web RLL

      WebRLL是VOS的一個運行連接庫(RLL)。
      WebRLL提供函數(shù),可以使VOS程序:
      ·從一個Web服務器獲得文檔
      ·從獲得的網頁中獲得數(shù)據(例如一個電子商務服務器)
      ·通過FTP協(xié)議發(fā)送和接收文件



     6.17. 多任務

      VOS可以同時運行多行語句,VOS有自己的多線程引擎來管理每一個任務。一個單通道的VOS應用程序如下:

      上圖中是一個簡單的單通道VOS任務,如果想用這個程序來管理4個通道,我們只有采用下面方式:

      VOS內部同時運行4個任務。開始只有一個任務,此任務產生了4個任務,各任務間互相傳遞參數(shù)(通道號)。函數(shù)arg(1)檢索參數(shù)個數(shù)1,這種情況下,arg()是通道號碼。
      可以使用兩種方法來產生VOS任務:同步和異步。異步產生任務采用:
       task_nr = spawn(filename[, arg, arg...])
      同步產生任務采用:
       string = exec(program_name[, arg, arg...])

     6.18. 任務管理

      從前面幾章可以看出,VOS能夠為多通道應用同時管理多個任務或者運行后臺任務,任何任務都有自己的一組變量和數(shù)組以及自己的執(zhí)行路徑。
      下面介紹管理VOS任務的一些基本概念

      6.18.1. 任務號

      每一個運行的任務都有一個唯一的任務號,任務號也稱為進程號(pid),這是從UNIX的術語中得來的,UNIX中任務也稱為進程。Getpid函數(shù)返回當前任務的任務號,例如:
      my_task_nr=getpid();

      6.18.2任務掛起

      使用函數(shù)sleep可以隨時掛起當前任務。參數(shù)是任務重新運行所需要等待的時間,單位為0.1秒。例如:
      sleep(50); # 等待5秒鐘
      掛起時間必須小于12個小時,即小于432000。
      掛起的任務不占用任何處理器資源(VOS v5或更高版本)。這就意味著輪循所產生的性能問題可以通過短時間掛起循環(huán)操作來消除。例如,如果一個任務在等待一個全局變量值改變或等待呼入:
        while (glb_get(0) strneq "NEW" and not TrunkGetState() strneq "Idle"))
          sleep(2);
        endwhile

      6.18.3. 終止任務

      可以使用kill函數(shù)來終止一個任務,kill函數(shù)用任務號作為參數(shù):
       kill(condemned_task_nr);
      執(zhí)行此函數(shù)后任務馬上就會終止,除非任務已被掛起,在等待內置函數(shù)的結束,例如sleep、sem_set、sc_play等函數(shù)。在任務被掛起的情況下,任務會在當前的內置函數(shù)結束后終止。
      Kill函數(shù)的返回值表示此操作是否成功:
       -1  無效任務號(此任務根本沒有激活過)。
       0  任務被掛起,當前的函數(shù)結束后任務就終止
       1  無效任務號(任務被激活過,但已經終止了)。
       其他 任務立即終止。


      6.18.4. 信號量、消息和全局變量


      VOS提供的多任務環(huán)境中,通常情況下各任務獨立地運行。有時,任務之間需要調整它們之間地活動或交換信息。
      VOS提供了三種任務間通信的函數(shù):
      ·信號量(Semaphores)
      ·消息
      ·全局變量
      信號量(Semaphores)通常管理代碼的關鍵部分,所謂關鍵部分就是指一組語句序列,如果兩個任務同時運行這部分代碼時,會產生錯誤。

     例:
       sem_set(1);
         # Update Critial-Zone
       sem_clear(1);

      共有兩種信號:編號的信號量和命名的信號量。命名的信號量可以通過信號量的名稱來進行操作,下面列出了管理命名信號量的函數(shù):

      VOS任務間使用msg_函數(shù)來傳送字符串消息。
        code = msg_put(pid, string);
        string = msg_get(seconds);
        pid = msg_pid();
        name = msg_sendername()
        msg_flush()

      全局變量是VOS任務間共享信息的一種非常有用的方式,采用全局變量的函數(shù)如下所示:

      全局變量
      glb_get   value = glb_get(num)
      取得給定全局變量號碼的當前值。
      glb_set   glb_set(num, string)
      設定全局變量為給定得字符串。

      命名的全局變量
      glb_clrallx  glb_clrallx(Name)
      設置全局變量所有值為空字符串。
      glb_decx    glb_decx(Name[,Index1, ...])
      一個命名的全局變量值減去1。
      glb_dimx    glb_dimx(Name[,Lower1,Upper1, ...] [,MaxLength])
      產生一個新的命名全局變量。
      glb_getsizex  glb_getsizex(Name)
      返回指定的全局變量的最大長度。
      glb_getx    glb_getx(Name[,Index1, ...])
      取得一個命名全局變量的值。
      glb_incx    glb_incx(Name[,Index1, ...])
      命名全局變量的值加1。
      glb_lowerx   glb_lowerx(Name[,DimNr])
      返回變量某一維索引的下限。
      glb_nrdimsx   glb_nrdimsx(Name)
      返回全局變量的維數(shù)。標量返回0,矢量返回1,矩陣返回2等等。
      glb_rangex    glb_rangex(Name[,DimNr])
      返回變量某一維索引的范圍(若沒有給定,則取0)。
      glb_setallx   glb_setallx(Name, Value)
      將某個全局變量的所有字符串設置為給定值。
      glb_setx     glb_setx(Name[,Index1, ...], Value)
      將某全局變量的某字符串設置為給定值。
      glb_upperx    glb_upperx(Name[,DimNr])
      返回變量某維索引的上限。

     6.19. 日期與時間函數(shù)

      IVR系統(tǒng)中的任務常常使用日期和時間(比如,呼叫的時間)。VOS的日期和時間函數(shù)如下所示:

     6.20. 字符串函數(shù)

     6.21. 文件和目錄函數(shù)(fil_,dir_)

      VOS提供了許多讀寫、查找文件和目錄的內置函數(shù),任何可以通過命令行查看的文件,包括網絡服務器文件,都可以通過這些函數(shù)來訪問。

     6.22 圖形化VOS,介紹

      第一次運行圖形化的VOS時,會看到如下界面:

      首先介紹一個新的概念――項目(PROJECT),對于使用VOS早期版本的開發(fā)者來說,這是一個新的東西,像市場上許多其他的編程工具(Visual Basic,Visual C,Borland C++Builder,等等)一樣,一個Project包含應用程序必須的所有文件。一個VOS的Project包括:
      ·VOS源代碼(.VS)
      ·信息流表(Flow Charts)(.flw)
      ·與項目相關的RLL
      ·INC,F(xiàn)UN,DEC,VL文件
      VOS源代碼文件是使用VOS語言編寫的文本文件。VOS源代碼文件通過如下格式加入文件夾Application中的項目中:Application+Vos源代碼文件名:

      在每一個文件夾中都有包含文件(.inc),函數(shù)文件(.fun),declaration文件和函數(shù)庫文件(.vl)的索引。
      信息流表文件指信息流表格的CTI應用。例如:

      6.23. 圖形化VOS,第一步

      下面,創(chuàng)建一個新的VOS項目(Project)來了解一下設置過程,創(chuàng)建一個新的VOS項目后,可以得到一個文件夾名為master。
      非常重要提示!!!永遠不要刪除程序master的索引,因為這是VOS要求的!
    這一步完成后,我們可以使用File菜單中的New函數(shù)來添加、刪除、編輯信息流表和VOS應用。

      6.24. 圖形化VOS,基本配置

      首先配置系統(tǒng)的中繼線(菜單 Project->設置中繼)。在中繼設置主窗口中,有一個TrunkConfiguration 選項卡。本選項卡用來設置每一通道應用及其相關程序類型。共有3種程序:
     1. 固定的:確實的類型的程序。當有站內呼叫通過此通道。VOS執(zhí)行此程序。
     2. ANI:對于選定的通道,VOS執(zhí)行"ANI Phone Number"選項中設置的應用
       程序。
     3. DNIS:對于選定的通道,VOS執(zhí)行"DNIS Phone Number"選項中設置的應
       用程序。
      ANI和DNIS 選項卡用來設置ANI和DNIS控制執(zhí)行的應用程序,一個典型的例子就是不同DNIS下不同業(yè)務的900語言文本系統(tǒng)。

      對于其他的DNIS或ANIS(沒有列出),可以關聯(lián)一個程序或者拒絕呼入。

     

    [ 全文英文版 ]

     

     


    本文 [ 目錄 ] [ 第一頁 ] [ 第二頁 ] [ 第三頁 ]

    融合通信專欄>>技術開發(fā)>>

     
     

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 封丘县| 凤翔县| 黄平县| 阿拉善盟| 泾阳县| 陇川县| 宝兴县| 平原县| 铜山县| 务川| 高邮市| 云阳县| 麻城市| 开封市| 金溪县| 天水市| 潢川县| 图木舒克市| 鄂州市| 永登县| 军事| 喜德县| 天津市| 亳州市| 池州市| 娱乐| 二手房| 鄂尔多斯市| 朔州市| 乐都县| 蓝田县| 西平县| 全椒县| SHOW| 纳雍县| 泰和县| 阿勒泰市| 浦东新区| 凯里市| 泾阳县| 霍林郭勒市| http://444 http://444 http://444 http://444 http://444 http://444