⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_trkin.c

📁 这是电信语音聊天设备的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
								audio_dtmf_resource[user_e1[user_num].dtmf].num[0] = SUCCESS_DUANA;//通知聊天室中的人X号到了
								audio_dtmf_resource[user_e1[user_num].dtmf].num[1] = user_e1[user_num].user_num + 1;//通知聊天室中的人X号到了
								audio_dtmf_resource[user_e1[user_num].dtmf].num[2] = SUCCESS_DUANB;
								audio_dtmf_resource[user_e1[user_num].dtmf].index = 0;//清空段索引
								audio_dtmf_resource[user_e1[user_num].dtmf].length = 3;//置段长度
								user_e1[user_num].user_state = ONLINE_CHAT;//转到成功处理
								audio_play(user_e1[user_num].dtmf,audio_dtmf_resource[user_e1[user_num].dtmf].num[audio_dtmf_resource[user_e1[user_num].dtmf].index]);
								//放提示音
								audio_dtmf_resource[user_e1[user_num].dtmf].index++;//提示音索引号加1
							}
							else//没有合意的聊友
							{
								command(5,3,user_num,user_e1[user_num].opp_sex,user_e1[user_num].opp_age,user_e1[user_num].telephone[0],user_e1[user_num].telephone[1],user_e1[user_num].telephone[2],user_e1[user_num].telephone[3],user_e1[user_num].telephone[4],user_e1[user_num].telephone[5],IDLE,IDLE,IDLE,IDLE,IDLE);
								user_e1[user_num].user_state = IDLE;
							}
						}
					}
					break;
					default:
					break;
				}
			}
		}
		break;
		case BACK_YES://找到合意的回呼资源
		{
			play_one(user_num,LIANXI_START_DUAN);//提示用户系统正在呼叫合意的聊友
			user_e1[user_num].user_state = WAIT_CALL;//转到成功处理
			audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
		}
		break;
		case WAIT_CALL://放音乐
		{
			if(audio_dtmf_resource[user_e1[user_num].dtmf].count > 0)//提示音放完了
			{
				play_one(user_num,MUSIC_DUAN);
				user_e1[user_num].user_state = WAIT_USER;//转到等待回呼用户处理 
				audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
			}
		}
		break;
		case WAIT_USER://等待回呼用户
		{
			back_index(user_num);//呼叫用户
			user_e1[user_num].delay++;
			if(user_e1[user_num].delay > 50)
			{
				user_e1[user_num].delay = 0;
				user_e1[user_num].control++;
				if(user_e1[user_num].control > 200)//10分钟内没有回呼用户拨进来
				{
					user_e1[user_num].control = 0;
					audio_stop(user_e1[user_num].dtmf);
					clr_duan(user_num);
					play_one(user_num,LIANXI_FAILURE_DUAN);
					user_e1[user_num].user_state = WAIT_COMMON;//转到提示用户进行其他选择处理
					audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
				}
			}
		}
		break;
		case BACK_NO://没有回呼资源
		{
			audio_stop(user_e1[user_num].dtmf);
			clr_duan(user_num);
			if(user_e1[user_num].chat_type == PASSWORD)
			{
				play_one(user_num,SUCCESS_PASSWORD);
			}
			else
			{
				play_one(user_num,ONLY_ONE_DUAN);
			}
			user_e1[user_num].user_state = WAIT_COMMON;//转到提示用户进行其他选择处理
			audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
		}
		break;
		case INFORM_BACK://通知聊天室里等候的人回呼用户已经拨进来了
		{
			if(user_e1[user_num].chat_type == PRIVATE_FEELING)
			{
				audio_stop(user_e1[user_num].dtmf);
				clr_duan(user_num);
				play_one(user_num,SUCCESS_PRIVATE);
				user_e1[user_num].user_state = SUCCESS_COMMON;//转到成功处理
			}
			else
			{
				audio_stop(user_e1[user_num].dtmf);
				clr_duan(user_num);
				audio_dtmf_resource[user_e1[user_num].dtmf].num[0] = SUCCESS_DUANA;//通知聊天室中的人X号到了
				audio_dtmf_resource[user_e1[user_num].dtmf].num[1] = user_e1[user_num].user_num + 1;//通知聊天室中的人X号到了
				audio_dtmf_resource[user_e1[user_num].dtmf].num[2] = SUCCESS_DUANB;
				audio_dtmf_resource[user_e1[user_num].dtmf].index = 0;//清空段索引
				audio_dtmf_resource[user_e1[user_num].dtmf].length = 3;//置段长度
				user_e1[user_num].user_state = SUCCESS_COMMON;//转到成功处理
				audio_play(user_e1[user_num].dtmf,audio_dtmf_resource[user_e1[user_num].dtmf].num[audio_dtmf_resource[user_e1[user_num].dtmf].index]);
				//放提示音
				audio_dtmf_resource[user_e1[user_num].dtmf].index++;//提示音索引号加1
			}
		}
		break;
		case SUCCESS_COMMON://成功处理
		{
			if(audio_dtmf_resource[user_e1[user_num].dtmf].count > 0)//提示音放完了
			{
				user_e1[user_num].user_state = IDLE;//将用户选择状态置为空闲
				user_e1[user_num].lc_state = WAIT_HANG;//转为等待用户挂机
				dtmf_release(user_e1[user_num].dtmf);//释放DTMF资源
				if(user_e1[user_num].chat_type < 9)//公共聊天室成功处理
				{
					connect(user_num,user_e1[user_num].user_mix);//连接相应时隙
					connect(((user_e1[user_num].user_mix - 0xe0 + 1) % 32) + 0xe0,user_num);//连接相应时隙
				}
				else//私人聊天室成功处理
				{
					connect(user_num,user_e1[user_num].opp_num);//连接相应时隙
					connect(user_e1[user_num].opp_num,user_num);//连接相应时隙
				}
			}
		}
		break;
		case ONLINE_CHAT://通知在线的用户
		{
			if(audio_dtmf_resource[user_e1[user_num].dtmf].count > 0)//提示音放完了
			{
				if(user_e1[user_num].chat_type < 9)
				{
					user_e1[user_num].user_state = IDLE;//将用户选择状态置为空闲
					user_e1[user_num].lc_state = WAIT_HANG;//转为等待用户挂机
					connect(user_num,user_e1[user_num].user_mix);//连接相应时隙
					connect(((user_e1[user_num].user_mix - 0xe0 + 1) % 32) + 0xe0,user_num);//连接相应时隙
					dtmf_release(user_e1[user_num].dtmf);//释放DTMF资源
				}
				else
				{
					user_e1[user_num].user_state = IDLE;//将用户选择状态置为空闲
					user_e1[user_num].lc_state = WAIT_HANG;//转为等待用户挂机
					connect(user_num,user_e1[user_num].opp_num);//连接相应时隙
					connect(user_e1[user_num].opp_num,user_num);//连接相应时隙
					dtmf_release(user_e1[user_num].dtmf);//释放DTMF资源	
				}
				if(dtmf_req(user_e1[user_num].opp_num,IDLE) != IDLE)//在线用户申请DTMF资源
				{
					only_one(user_e1[user_num].opp_num);
					connect(audio_dtmf_resource[user_e1[user_e1[user_num].opp_num].dtmf].slot,user_e1[user_num].opp_num);//连接对应时隙
					clr_duan(user_e1[user_num].opp_num);
					play_one(user_e1[user_num].opp_num,ZHUAN_USER);
				}
				user_e1[user_e1[user_num].opp_num].user_state = ONLINE_INFORM;//转到在线用户加入第一选择的聊天室
				user_e1[user_e1[user_num].opp_num].lc_state = WAIT_DOWN;//在线用户选择
				reduce_user(user_e1[user_e1[user_num].opp_num].chat_num,user_e1[user_num].opp_num);//将在线用户从目前的聊天室退出
			}
		}
		break;
		case ONLINE_INFORM://将在线找到的人加入他第一选择的聊天室
		{
			if(user_e1[user_num].dtmf != IDLE)
			{
				if(audio_dtmf_resource[user_e1[user_num].dtmf].count > 0)//提示音放完了
				{
					user_e1[user_num].user_state = JUDGE_USER;//将用户选择状态置为空闲
					user_e1[user_num].chat_type = user_e1[user_num].first_select;
				}
			}
			else
			{
				user_e1[user_num].user_state = JUDGE_USER;//将用户选择状态置为空闲
				user_e1[user_num].chat_type = user_e1[user_num].first_select;
			}
		}
		break;
		case WAIT_COMMON://聊天室中没人处理
		{
			if(user_select != IDLE)//用户选择进入其他聊天室
			{
				audio_stop(user_e1[user_num].dtmf);//停止放音
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				if(user_select == 1)
				{
					reduce_user(user_e1[user_num].chat_num,user_num);
					connect(audio_dtmf_resource[user_e1[user_num].dtmf].slot,user_num);//连接提示音
					connect(user_num,audio_dtmf_resource[user_e1[user_num].dtmf].slot);//连接提示音
					play_one(user_num,FIRST_AUDIO);
					audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
					user_e1[user_num].user_state = SELECT_START;
				}
				else
				{
					error_chuli(user_num);
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;
			}
			else
			{
				if(audio_dtmf_resource[user_e1[user_num].dtmf].count > 1)//用户选择等待
				{
					audio_dtmf_resource[user_e1[user_num].dtmf].count = 0;
					user_e1[user_num].user_state = IDLE;//将用户选择状态置为空闲
					user_e1[user_num].lc_state = WAIT_HANG;//转为等待用户挂机
					dtmf_release(user_e1[user_num].dtmf);//释放DTMF资源
					if(user_e1[user_num].chat_type < 9)//将该用户加入其选择的公共聊天室
					{
						connect(user_num,user_e1[user_num].user_mix);//连接相应时隙
						connect(((user_e1[user_num].user_mix - 0xe0 + 1) % 32) + 0xe0,user_num);//连接相应时隙
					}
					else//将该用户加入其选择的私人聊天室
					{
						connect(user_num,user_e1[user_num].opp_num);//连接相应时隙
						connect(user_e1[user_num].opp_num,user_num);//连接相应时隙
					}
				}
			}
		}	
		break;
		case WAIT_PASSWORD://等待用户输入密码
		{
			if(user_select != IDLE)//用户按键了
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				if(user_select < 10)
				{
					audio_stop(user_e1[user_num].dtmf);//停止放音
					audio_dtmf_resource[user_e1[user_num].dtmf].count = 1;
					audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
					//置聊天室密码
					user_e1[user_num].password[user_e1[user_num].user_index] = user_select;
					user_e1[user_num].user_index++;
					if(user_e1[user_num].user_index == 6)//密码收齐
					{
						user_e1[user_num].user_state = JUDGE_USER;//转到判断聊天室人数
					}
					audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;//清空用户拨键
				}
				else
				{
					error_chuli(user_num);//输入错误
				}
			}
		}
		break;
		case REGISTER_YES://已经注册的用户选择私聊
		{
			clr_duan(user_num);
			play_one(user_num,OLD_NEW_SELECT);
			user_e1[user_num].user_state = OLD_NEW;//提示输入性别
			user_e1[user_num].user_index = 0;
		}
		break;
		case YES_REGISTER://用户选择老聊友(聊天号正确)
		{
			clr_duan(user_num);
			play_one(user_num,LIANXI_START_DUAN);
			user_e1[user_num].user_state = WAIT_CALL;//转到成功处理
			audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = OCCUPY;
			add_user(user_num,user_e1[user_num].password,user_e1[user_num].chat_type);
		}
		break;
		case NO_REGISTER://用户选择老聊友(聊天号是空号)
		{
			clr_duan(user_num);
			play_one(user_num,ERROR_NUMBER);
			user_e1[user_num].user_state = INFORM_END;//转为等待提示音结束			
		}
		break;
		case USER_BUSY://通知用户要找的老聊友正忙
		{
			clr_duan(user_num);
			play_one(user_num,LIANXI_BUSY);
			user_e1[user_num].user_state = INFORM_END;//转为等待提示音结束
		}
		break;
		case CHAT_NUMBER://等待用户输入老聊友的聊天号
		{
			if(user_select != IDLE)//用户按键了
			{
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				if(user_select < 10)
				{
					if(user_e1[user_num].user_index == 0)
					{
						audio_stop(user_e1[user_num].dtmf);//停止放音
						audio_dtmf_resource[user_e1[user_num].dtmf].auto_flag = LEISURE;//清自动放音标志
					}
					user_e1[user_num].number_chat[user_e1[user_num].user_index] = user_select;
					user_e1[user_num].user_index++;
					if(user_e1[user_num].user_index == 6)//聊天号收齐
					{
						command(5,1,user_num,(user_e1[user_num].number_chat[0] << 4) + user_e1[user_num].number_chat[1],(user_e1[user_num].number_chat[2] << 4) + user_e1[user_num].number_chat[3],(user_e1[user_num].number_chat[4] << 4) + user_e1[user_num].number_chat[5],IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
						user_e1[user_num].user_state = IDLE;
					}
				}
				else
				{
					error_chuli(user_num);//输入错误
				}
				audio_dtmf_resource[user_e1[user_num].dtmf].buf = IDLE;//清空用户拨键
			}
		}
		break;
		case OLD_NEW://提示用户选择新的聊天对象或找老聊友
		{
			if(user_select != IDLE)//用户按键了
			{
				audio_stop(user_e1[user_num].dtmf);//停止放音
				if(user_monitor_num == user_num)//往后台回应监视信息
				{
					command(1,0,user_num,USER_PRESS_SIGNAL,user_select,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
				}
				switch(user_select)
				{
					case 1://用户选择老聊友
					{
						clr_duan(user_num);
						play_one(user_num,CHAT_NUMBER_DUAN);
						user_e1[user_num].user_state = CHAT_NUMBER;//转为接收聊天号
						user_e1[user_num].user_index = 0;
					}
					break;
					case 2://用户选择新的聊天对象
					{
						play_one(user_num,OPP_SEX_DUAN);
						user_e1[user_num].user_state = OPP_SEX;//提示输入性别
						user_e1[user_num].user_index = 0;		
					}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -