本文主要是介绍AIS client的初始化过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简单来说:
1,ais client app会调用qcarcam_initialize建立与server的连接,通信方式为本地socket通信
2,在建立通信后,会与server交换一部分信息,用于后续建立main connection以及event connection
3,在创建event connection的过程中,还会创建两个重要的线程:ais_client_event_recv_thread,ais_client_event_cb_thread
4,ais_client_event_recv_thread线程负责接收event事件,并且把接收到的时间入列(ais_event_queue_enqueue)
5,ais_client_event_cb_thread会从event队列中取出事件,并调用相应的回调函数进行处理,这里需要注意的是,这里的event队列不确定是否和4中描述的队列是同一个队列.
流程图:
ais_client_alloc
这个函数中会从全局数组变量sgs_ais_client中找到一个空的位置来初始化client,sgs_ais_client数组最大成员为64,也就是ais支持的client个数为64个:
#define AIS_MAX_USR_CONTEXTS 64
static int ais_client_alloc(void)
{int rc = -1;int i;AIS_LOG_CLI_API("E");pthread_mutex_lock(&sgs_mutex);for (i = 0; i < AIS_MAX_USR_CONTEXTS; i++) { if (sgs_ais_client[i].qcarcam_hndl == NULL){ais_client_init(&sgs_ais_client[i]);sgs_ais_client[i].qcarcam_hndl = AIS_CONTEXT_IN_USE;rc = i; break;}}
ais_client_exchange
这个函数会通过本地socket通信方式与server建立连接,交换连接信息.
/*** connection information to be exchanged between client/server*/
typedef struct
{int id; /**< connection id */int cnt; /**< number of connections */unsigned int gid; /**< group id of client*/unsigned int pid; /**< process id of client */unsigned int app_version; /**< QCarCam API version of application */unsigned int version; /**< QCarCam API version of client lib */CameraResult result; /**< result of exchange */unsigned int flags; /**< flags for new connection */
} s_ais_conn_info;
这篇关于AIS client的初始化过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!