亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chvapi.cpp

?? Windows上的MUD客戶端程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*----------------------------------------------------------------------------
                        _                              _ _       
        /\             | |                            | (_)      
       /  \   _ __   __| |_ __ ___  _ __ ___   ___  __| |_  __ _ 
      / /\ \ | '_ \ / _` | '__/ _ \| '_ ` _ \ / _ \/ _` | |/ _` |
     / ____ \| | | | (_| | | | (_) | | | | | |  __/ (_| | | (_| |
    /_/    \_\_| |_|\__,_|_|  \___/|_| |_| |_|\___|\__,_|_|\__,_|

    The contents of this file are subject to the Andromedia Public
	License Version 1.0 (the "License"); you may not use this file
	except in compliance with the License. You may obtain a copy of
	the License at http://www.andromedia.com/APL/

    Software distributed under the License is distributed on an
	"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
	implied. See the License for the specific language governing
	rights and limitations under the License.

    The Original Code is Pueblo client code, released November 4, 1998.

    The Initial Developer of the Original Code is Andromedia Incorporated.
	Portions created by Andromedia are Copyright (C) 1998 Andromedia
	Incorporated.  All Rights Reserved.

	Andromedia Incorporated                         415.365.6700
	818 Mission Street - 2nd Floor                  415.365.6701 fax
	San Francisco, CA 94103

    Contributor(s):
	--------------------------------------------------------------------------
	   Chaco team:  Dan Greening, Glenn Crocker, Jim Doubek,
	                Coyote Lussier, Pritham Shetty.

					Wrote and designed original codebase.

------------------------------------------------------------------------------

	Implementation of the ChVAPI object, which manages the interface between
	VAPI and the Sound Module.

----------------------------------------------------------------------------*/

// $Header: /home/cvs/chaco/modules/client/msw/ChSound/ChVAPI.cpp,v 1.1 1996/09/26 17:32:05 coyote Exp $

#include "headers.h"

#if defined( CH_USE_VAPI )

#include <ChReg.h>

#include "ChVAPI.h"


/*----------------------------------------------------------------------------
	Constants
----------------------------------------------------------------------------*/

#define DEF_VAPI_PORT	12370
											/* This should be set to zero
												if Voxware ever fixes the
												problem of returning the
												correct port number */
#define VAPI_PORT		DEF_VAPI_PORT


/*----------------------------------------------------------------------------
	ChVAPI static member variables
----------------------------------------------------------------------------*/

ChVAPI*				ChVAPI::m_this = 0;
int					ChVAPI::m_iUsage = 0;
VAPI_HANDLE			ChVAPI::m_hVAPI = 0;

ChVAPISessionMgr	ChVAPI::m_vapiSessions;
chuint16			ChVAPI::m_suVAPIPort = 0;
string				ChVAPI::m_strVAPILocalHost;

VAPI_USER_INFO		ChVAPI::m_userInfo;

chuint32			ChVAPI::m_luMikeVolume;
chuint32			ChVAPI::m_luMikeSensitivity;
bool				ChVAPI::m_boolRejectCalls;


/*----------------------------------------------------------------------------
	ChVAPI public methods
----------------------------------------------------------------------------*/

ChVAPI::ChVAPI()
{
	if (0 == m_iUsage)
	{
		VAPI_INITIALIZE			vapiInit;
		VAPI_TRANSACTION_HANDLE	hTransaction;
		VAPI_RETCODE			retCode;

		m_this = this;

		ChMemClearStruct( &m_userInfo );
		m_userInfo.wSizeOfUserInfo = sizeof( VAPI_USER_INFO );

		ChMemClearStruct( &vapiInit );
		vapiInit.wSizeOfInitialize = sizeof( VAPI_INITIALIZE );
		vapiInit.usListenPort = VAPI_PORT;
		vapiInit.lpNotifyProc = NotifyProc;

		retCode = vapiInitialize( &m_hVAPI, &hTransaction, 0,
									&vapiInit );
		if (VAPI_NO_ERROR != retCode)
		{
			#if defined( CH_DEBUG )
			{
				char		cBuffer[160];

				sprintf( cBuffer, "VAPI: Error calling vapiInitialize (%hu)\n",
										retCode );
				TRACE( cBuffer );
			}
			#endif	// defined( CH_DEBUG )

			m_hVAPI = 0;
		}
		else
		{
			UpdatePrefs();
		}
	}

	m_iUsage++;
}


ChVAPI::~ChVAPI()
{
	if (0 == --m_iUsage)
	{
		if (GetVAPIHandle())
		{
			VAPI_RETCODE			retCode;

			retCode = vapiCleanup( GetVAPIHandle() );
			if (VAPI_NO_ERROR != retCode)
			{
				#if defined( CH_DEBUG )
				{
					char		cBuffer[160];

					sprintf( cBuffer, "VAPI: Error calling vapiCleanup (%hu)\n",
										retCode );
					TRACE( cBuffer );
				}
				#endif	// defined( CH_DEBUG )
			}
		}

		m_hVAPI = 0;
	}
}


/*----------------------------------------------------------------------------
	ChVAPI public methods
----------------------------------------------------------------------------*/

bool ChVAPI::MakeCall( const string& strCallId, const string& strHost,
						chuint16 suPort, chflag32 flOptions,
						chflag32 flRemoteOptions )
{
	VAPI_RETCODE			retCode;
	VAPI_TRANSACTION_HANDLE	hTransaction;
	bool					boolSuccess;
	chuint16				suFullDuplex;
	bool					boolFullDuplex;
											// Copy information to be shared

	ASSERT( VAPI_MAX_LASTNAME_LENGTH > sizeof( chflag32 ) );

	sprintf( m_userInfo.szLastName, "%d", flRemoteOptions );
	strncpy( m_userInfo.szFirstName, (const char*)strCallId, VAPI_MAX_LASTNAME_LENGTH );
	m_userInfo.szLocale2[VAPI_MAX_LASTNAME_LENGTH - 1] = '\0';

	vapiSetUserInfo( GetVAPIHandle(), &m_userInfo );

	retCode = vapiQuerySoundDevices( GetVAPIHandle(), 0, 0, &suFullDuplex );
	boolFullDuplex = !!suFullDuplex;
	retCode = vapiSetSoundDevices( GetVAPIHandle(), 0, 0, boolFullDuplex );
	if (VAPI_NO_ERROR != retCode)
	{
		#if defined( CH_DEBUG )
		{
			char		cBuffer[160];

			sprintf( cBuffer, "VAPI: Error calling vapiSetSoundDevices (%hu)\n",
								retCode );
			TRACE( cBuffer );
		}
		#endif	// defined( CH_DEBUG )

		boolSuccess = false;
	}
	else
	{
		VAPI_USER_INFO		destUserInfo;

		ChMemClearStruct( &destUserInfo );
		destUserInfo.wSizeOfUserInfo = sizeof( VAPI_USER_INFO );
		strcpy( destUserInfo.szNetAddress, (const char*)strHost );
		destUserInfo.usPort = suPort;

		retCode = vapiEstablishSession(	GetVAPIHandle(), &hTransaction,
											0, &destUserInfo, USE_UDP );
		if (VAPI_NO_ERROR != retCode)
		{
			#if defined( CH_DEBUG )
			{
				char		cBuffer[160];

				sprintf( cBuffer,
							"VAPI: Error calling vapiEstablishSession (%hu)\n",
							retCode );
				TRACE( cBuffer );
			}
			#endif	// defined( CH_DEBUG )

			boolSuccess = false;
		}
	}

	return boolSuccess;
}


bool ChVAPI::Hangup( const string& strCallId )
{
	return m_vapiSessions.Hangup( GetVAPIHandle(), strCallId );
}


void ChVAPI::UpdatePrefs()
{
	ChRegistry	reg( SOUND_PREFS_GROUP );
	chint32		lVolume;

	reg.ReadBool( SOUND_PREFS_REJECT_CALLS, m_boolRejectCalls,
					SOUND_PREFS_REJECT_CALLS_DEF );

	reg.Read( SOUND_PREFS_MIKE_VOLUME, m_luMikeVolume,
				SOUND_PREFS_MIKE_VOLUME_DEF );
	reg.Read( SOUND_PREFS_MIKE_SENSITIVITY, m_luMikeSensitivity,
				SOUND_PREFS_MIKE_SENSITIVITY_DEF );

	vapiSetRecordLevel( GetVAPIHandle(), GetMikeVolume() );

	if (0 == GetMikeVolume())
	{
		vapiMuteMike( GetVAPIHandle(), VAPI_MUTE_MIKE );
	}
	else
	{
		vapiMuteMike( GetVAPIHandle(), VAPI_UNMUTE_MIKE );
	}

	vapiSetVoiceActivationLevel( GetVAPIHandle(),
									(chuint16)GetMikeSensitivity() );

	reg.Read( SOUND_PREFS_SPEECH_VOLUME, lVolume, VOLUME_MAX_RANGE );
	if (lVolume < 0)
	{
		lVolume = 0;
	}
	else if (lVolume > VOLUME_MAX_RANGE)
	{
		lVolume = VOLUME_MAX_RANGE;
	}
	vapiSetSpeakerVolume( GetVAPIHandle(), lVolume );
}


/*----------------------------------------------------------------------------
	ChVAPI notification callback
----------------------------------------------------------------------------*/

VAPI_RETCODE ChVAPI::NotifyProc( unsigned short wMessage,
									unsigned long hTransaction,
				    				unsigned long dwVapiParamOne,
				    				unsigned long dwVapiParamTwo,
				    				unsigned long dwUserParam )
{
	VAPI_HANDLE			hVAPI;

	#if defined( CH_DEBUG )
	char				cBuffer[160];
	#endif	// defined( CH_DEBUG )

	hVAPI = GetVAPIHandle();

	switch (wMessage)
	{
		case VAPI_NOTIFY_MIC_VOLUME_CHANGE:
		{
			//UpdateRecordSlider(dwVapiParamOne);
			return VAPI_NO_ERROR;
		}

		case VAPI_NOTIFY_BUFFER_LEVEL_CHANGE:
		{
			//UpdateBufferScale(dwVapiParamOne);
			return VAPI_NO_ERROR;
		}

		case VAPI_NOTIFY_MIC_GAINMETER_CHANGE:
		{
			//UpdateXmitSpeechScale(dwVapiParamOne, 0);
			return VAPI_NO_ERROR;
		}

		case VAPI_NOTIFY_NEW_SESSION_STATUS:
		{
			switch( dwVapiParamOne )
			{
				case VAPI_NOTIFY_STATUS_ESTABLISHED:
				{
					VAPI_SESSION_INFO*	pSessionInfo;
					VAPI_RETCODE		retCode;
					VAPI_SESSION_HANDLE	hSession;
					string				strCallId;
					chflag32			flOptions;

					pSessionInfo = (VAPI_SESSION_INFO*)dwVapiParamTwo;
					hSession = pSessionInfo->hSession;

					strCallId = pSessionInfo->RemoteUserInfo.szFirstName;
					flOptions =
						atol( pSessionInfo->RemoteUserInfo.szLastName );

					TRACE( "VAPI: Call is established.\n" );

					m_vapiSessions.Set( strCallId, hSession, flOptions );

					retCode = vapiHandsOffMode( hVAPI, VAPI_HANDS_OFF_MODE );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiHandsOffMode (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}

					retCode = vapiSetInitialDelay( hVAPI, hSession, 100 );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSetInitialDelay (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}

					retCode = vapiSetSilentWindow( hVAPI, 0 );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSetSilentWindow (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}

					retCode = vapiSetSpeakerVolume( hVAPI, 50 );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSetSpeakerVolume (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}

					retCode = vapiSetRecordLevel( hVAPI, GetMikeVolume() );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSetRecordLevel (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}

					retCode = vapiSetVoiceActivationLevel( GetVAPIHandle(),
															(chuint16)GetMikeSensitivity() );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSetSpeechActivationLevel (%hu)\n",
										retCode );
							TRACE( cBuffer );
						}
						#endif	// defined( CH_DEBUG )
					}
					break;
				}

				case VAPI_NOTIFY_STATUS_RINGING:
				{
					TRACE( "VAPI: Ring!\n" );
					break;
				}

				case VAPI_NOTIFY_STATUS_INCOMING_CALL:
				{
					VAPI_TRANSACTION_HANDLE	hTransaction;
					LPVAPI_SESSION_INFO		pSessionInfo;
					VAPI_RETCODE			retCode;
					VAPI_SESSION_HANDLE		hSession;
					unsigned long			dwResponse;

					TRACE( "VAPI: Incoming call.\n" );

					pSessionInfo = (VAPI_SESSION_INFO*)dwVapiParamTwo;
					hSession = pSessionInfo->hSession;

					if (m_vapiSessions.AllSessionsInUse())
					{
						dwResponse = VAPI_SESSION_RESPONSE_BUSY;
					}
					else
					{
						dwResponse = VAPI_SESSION_RESPONSE_ACCEPT;
					}

					retCode =
						vapiSessionResponse( hVAPI, &hTransaction,
												0, hSession, dwResponse );
					if (VAPI_NO_ERROR != retCode)
					{
						#if defined( CH_DEBUG )
						{
							sprintf( cBuffer,
										"VAPI: Error calling "
										"vapiSessionResponse (%hu)\n",
										retCode );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日噜噜夜夜狠狠视频欧美人| 欧美在线不卡一区| 色婷婷综合五月| 久久久三级国产网站| 亚洲成人综合网站| 99久久婷婷国产综合精品电影 | 亚洲五月六月丁香激情| 韩国三级中文字幕hd久久精品| 欧洲色大大久久| 国产精品久久久久影院| 精品一二三四在线| 欧美军同video69gay| 日韩美女久久久| 国产福利一区二区三区视频在线| 欧美乱妇23p| 午夜成人免费视频| 欧美色手机在线观看| 亚洲日本乱码在线观看| 国产超碰在线一区| 国产亚洲欧美日韩在线一区| 久久99精品久久久| 日韩视频免费观看高清在线视频| 亚洲国产精品欧美一二99| 色婷婷久久久久swag精品| 国产精品久久久久一区二区三区共| 国产一区二区三区视频在线播放| 日韩三级中文字幕| 日韩激情av在线| 91麻豆精品国产| 三级一区在线视频先锋 | aa级大片欧美| 国产精品久久久久久久久久久免费看 | 欧美日韩国产在线播放网站| 亚洲老司机在线| 在线亚洲高清视频| 亚洲永久精品国产| 欧美曰成人黄网| 亚洲大片免费看| 日韩一区二区三区在线| 久久精品国产在热久久| 久久毛片高清国产| 国产99精品国产| 亚洲精品自拍动漫在线| 欧美日韩五月天| 日本一区中文字幕| 精品黑人一区二区三区久久 | 日韩二区三区四区| 26uuu国产电影一区二区| 国产精品资源在线| 国产精品久99| 欧美三级日韩三级国产三级| 日本欧美一区二区三区乱码| 精品国产成人在线影院| 成人美女视频在线观看18| 亚洲欧美中日韩| 91精品国产综合久久久久久久| 美日韩一区二区三区| 国产日韩欧美电影| 色婷婷av一区二区三区之一色屋| 日日夜夜一区二区| 久久久久国产成人精品亚洲午夜| 91老师片黄在线观看| 午夜激情综合网| 国产日韩视频一区二区三区| 欧美系列一区二区| 精品一二线国产| 亚洲午夜三级在线| 国产婷婷精品av在线| 欧洲国产伦久久久久久久| 久久不见久久见中文字幕免费| 国产精品理论片| 日韩一区和二区| 91麻豆国产在线观看| 另类小说综合欧美亚洲| 一区二区不卡在线视频 午夜欧美不卡在 | 国产麻豆视频一区| 午夜视频久久久久久| 国产亚洲一二三区| 欧美精品久久久久久久多人混战| 国产精品91xxx| 天天做天天摸天天爽国产一区 | 中文字幕av资源一区| 正在播放一区二区| 99v久久综合狠狠综合久久| 久久国产精品露脸对白| 一区二区三区在线视频播放| 久久人人爽爽爽人久久久| 欧美日韩国产免费一区二区 | 国产一区不卡在线| 日韩黄色免费电影| 一区二区在线看| 欧美极品少妇xxxxⅹ高跟鞋| 678五月天丁香亚洲综合网| 色婷婷久久99综合精品jk白丝 | 国产综合色产在线精品| 日本91福利区| 午夜精品福利一区二区三区av| 亚洲精品国产a久久久久久 | 亚洲成av人片一区二区三区| 国产精品看片你懂得| 中文字幕久久午夜不卡| 久久久亚洲午夜电影| 亚洲精品一区二区三区99| 777色狠狠一区二区三区| 91精彩视频在线| 色综合中文字幕国产| 不卡大黄网站免费看| 国产成人a级片| 国产91在线看| 成人av免费在线| 国产成人精品亚洲777人妖| 国产成人aaa| 成人黄色小视频| www.日韩精品| 色美美综合视频| 91麻豆精东视频| 欧美日韩一区小说| 欧美精品vⅰdeose4hd| 欧美一卡2卡3卡4卡| 精品卡一卡二卡三卡四在线| 精品1区2区在线观看| 国产视频一区在线播放| 中文字幕中文字幕在线一区| 亚洲欧洲色图综合| 一区二区三区精密机械公司| 亚洲国产综合色| 蜜臀va亚洲va欧美va天堂 | 久久不见久久见免费视频1| 久久久久久久一区| 亚洲欧美经典视频| 亚洲天堂2016| 亚洲chinese男男1069| 日韩av在线发布| 精品亚洲国产成人av制服丝袜| 韩国成人在线视频| 高清在线观看日韩| 在线精品亚洲一区二区不卡| 欧美精三区欧美精三区| 久久久久久亚洲综合| 亚洲欧美日韩国产另类专区| 天天综合色天天综合色h| 久久99热99| 91色.com| 欧美一级二级三级蜜桃| 国产日韩综合av| 亚洲国产精品人人做人人爽| 国产一区二区不卡老阿姨| 91视频www| 欧美成人bangbros| 亚洲免费毛片网站| 美国av一区二区| 91在线高清观看| 欧美电视剧在线看免费| 亚洲最快最全在线视频| 日韩高清一区在线| 国产成人精品亚洲日本在线桃色| 欧美色图片你懂的| 国产欧美精品在线观看| 亚洲成av人在线观看| 国产成人综合网站| 欧美日韩一区在线观看| 国产精品久久久久久久蜜臀| 日一区二区三区| 99r国产精品| 久久美女高清视频| 日韩精品三区四区| 色国产精品一区在线观看| 欧美电影免费观看高清完整版在| 亚洲激情在线激情| 丁香另类激情小说| 日韩精品中文字幕一区| 亚洲成人精品影院| 91亚洲国产成人精品一区二三| 欧美大片日本大片免费观看| 亚洲一级二级三级| 99久久伊人久久99| 久久久久久一级片| 久久99精品国产91久久来源| 欧美四级电影网| 亚洲美女少妇撒尿| jizz一区二区| 中文字幕免费在线观看视频一区| 中文av一区二区| 久久综合色播五月| 亚洲va欧美va人人爽| 91女厕偷拍女厕偷拍高清| 日本一区二区三区国色天香| 韩国精品主播一区二区在线观看| 91精品国产日韩91久久久久久| 一区二区三区四区中文字幕| 91丨porny丨国产入口| 国产精品乱码一区二区三区软件| 国精产品一区一区三区mba视频| 欧美一级片免费看| 喷水一区二区三区| 日韩免费高清av| 久久国产婷婷国产香蕉| 欧美成人伊人久久综合网| 久久机这里只有精品| 2020国产精品久久精品美国|