通常情况下,每一个 client 栈都由一个进程创建,默认情况下 client 的配置是从配置文件中加载的,但也可以通过调用 API 来创建和初始化堆栈。配置项的由结构体 apt_dir_layout 指定。
源码:
apt_dir_layout_t *dir_layout = apt_default_dir_layout_create(root_dir_path,pool);
mrcp_client_t *mrcp_client = unimrcp_client_create(dir_layout);
可以创建一个或多个 mrcp_application_t 实例并注册到 client 栈。mrcp_application_t 的实例其实就是用户应用程序和 client 交流的逻辑表示。
创建时必须提供消息处理程序(mrcp_app_message_handler_f)应用程序实例的。处理程序用于接收从客户端堆栈发送的消息
源码:
mrcp_application_t *mrcp_app = mrcp_application_create(app_message_handler,engine,pool);
mrcp_client_application_register(mrcp_client,mrcp_ap,name;
客户端堆栈一直在循环运行,等待来自注册用户应用程序的消息和/或其他内部任务。
mrcp_client_start(mrcp_client);
mrcp_client_async_start_set(mrcp_client,handler);
mrcp_client_start(mrcp_client);
mrcp_session_t *mrcp_session = mrcp_application_session_create(mrcp_app,profile,NULL);
mrcp_channle_t *mrcp_channel = mrcp_application_channel_create(
mrcp_session, MRCP_RECOGNIZER_RESOURCE, termination, NULL, obj);
mrcp_application_channel_add(mrcp_session,mrcp_channel);
通过以上步骤以后, client 栈将向 MRCP server 发送一个添加资源通道的请求。这个请求是异步的。当 client 栈的回调函数 on_channel_add 被调用时,user application 就获取到响应。
mrcp_application_message_send(mrcp_session,mrcp_channel,mrcp_message);
这个函数发送一个请求给 MRCP server,而响应将是异步接收。
on_message_receive(mrcp_app,mrcp_session_mrcp_channel,mrcp_message);
在收到来自 MRCP server 的响应或事件时,将调用这个回调函数。
已分配的 MRCP 资源通道可以选择性的释放。否则的话,资源通道在 Session终止的时候也会释放。
mrcp_application_channel_remove(mrcp_session,mrcp_channel);
调用这个函数将会给 MRCP server 发送一个移除资源通道的请求。这个请求的处理是异步的。当 client 栈的回调函数 on_channel_remove 被调用时,即 user application 收到了响应。
mrcp_application_session_terminate(mrcp_session);
调用这个函数,将会给 MRCP server 发送一个终止 Session 的请求。当函数 on_session_terminate 被调用时,即 user application 接收到了响应。需要注意的是,在 Session 的生命周期内,Session 是可以随时终止的。
mrcp_application_session_destroy(mrcp_session);
调用这个函数将通过释放 Session 的内存来最终销毁 MRCP Session。需要注意的是,只有在收到 session 终止请求的响应时,Session 才能被终止及销毁。
mrcp_client_shutdown(mrcp_client);
调用这个函数将停止消息循环,并且停止所有在 Client 栈上的活动。
mrcp_client_destroy(mrcp_client);
调用这个函数来最终销毁 client 栈和释放所有已申请的内存。
通常,一个 Server 栈的实例也是由一个进程创建的。server 的配置也是加载的配置文件,并且配置的内容存储在结构体 apt_dir_layout_t 中。
/* create default directory layout relative to root directory path */
apt_dir_layout_t *dir_layout = apt_default_dir_layout_create(root_dir_path,pool);
/* start server stack processing */
mrcp_server_t *server = unimrcp_server_start(dir_layout);
/* shutdown server stack processing */
unimrcp_server_shutdown(server);
通过调用以上函数,停止消息循环,终止 server 栈上的一切活动,最后销毁 server 栈。