📄 c_manage.c
字号:
{
chat_common_resource[chat_num].mt8924_user[temp] = user_num;
user_e1[user_num].user_mix = chat_common_resource[chat_num].mt8924_slot[temp];
return(temp);
}
}
}
else//语控下的混合时隙申请
{
for(temp = 0;temp < 3;temp++)
{
if(chat_common_resource[chat_num].mt8924_user[temp] != IDLE)
{
i = chat_common_resource[chat_num].mt8924_user[temp];
if(yukong_resource[user_e1[i].yukong_num].state == AUDIO_NO)
{
user_e1[i].user_mix = IDLE;
chat_common_resource[chat_num].mt8924_user[temp] = user_num;
user_e1[user_num].user_mix = chat_common_resource[chat_num].mt8924_slot[temp];
no_sound(user_e1[user_num].user_mix);
connect(user_num,user_e1[user_num].user_mix);//连接相应时隙
connect(((user_e1[user_num].user_mix - 0xe0 + 1) % 32) + 0xe0,user_num);//连接相应时隙
for(temp = 0;temp < 16;temp++)
{
if(chat_common_resource[chat_num].user_num[temp] != IDLE)
{
if(user_e1[i].user_mix == IDLE)
{
connect((chat_common_resource[chat_num].mt8924_slot[3] + 1 - 0xe0) % 32 + 0xe0,i);
}
}
}
return(0);
}
}
}
}
}
void mt8924_release(unsigned char user_num,unsigned char chat_num,unsigned char type)//将该用户从语音混合中删除
{
unsigned char xdata temp;
if(type == 0)//正常的混合时隙释放
{
no_sound(user_e1[user_num].user_mix);
for(temp = 0;temp < 4;temp++)
{
if(chat_common_resource[chat_num].mt8924_user[temp] == user_num)//寻找用户
{
chat_common_resource[chat_num].mt8924_user[temp] = IDLE;
user_e1[user_num].user_mix = IDLE;
}
}
}
else//聊天室中的人数由4到5时的混合时隙释放
{
no_sound(chat_common_resource[chat_num].mt8924_slot[3]);
user_e1[chat_common_resource[chat_num].mt8924_user[3]].user_mix = IDLE;
chat_common_resource[chat_num].mt8924_user[3] = IDLE;
for(temp = 0;temp < 16;temp++)
{
if(chat_common_resource[chat_num].user_num[temp] != IDLE)
{
if(user_e1[chat_common_resource[chat_num].user_num[temp]].user_mix == IDLE)
{
connect(((chat_common_resource[chat_num].mt8924_slot[3] + 1 - 0xe0) % 32) + 0xe0,chat_common_resource[chat_num].user_num[temp]);
}
}
}
}
}
void mt8924_common_release(unsigned char chat_num)//MT8924混合资源释放
{
unsigned char xdata temp;
for(temp = 0;temp < 4;temp++)
{
no_sound(chat_common_resource[chat_num].mt8924_slot[temp]);
chat_common_resource[chat_num].mt8924_user[temp] = IDLE;
}
}
void common_yukong_release(unsigned char chat_num,unsigned char user_num,unsigned char type)//当公共聊天室由5人到4人时,释放所有语控资源
{
unsigned char xdata temp,i;
for(temp = 0;temp < 16;temp++)
{
if(chat_common_resource[chat_num].user_num[temp] != IDLE)
{
yukong_release(user_e1[chat_common_resource[chat_num].user_num[temp]].yukong_num);
}
}
yukong_release(user_e1[user_num].yukong_num);
if(type == 1)
{
mt8924_common_release(chat_num);
for(temp = 0;temp < 16;temp++)
{
if(chat_common_resource[chat_num].user_num[temp] != IDLE)
{
i = chat_common_resource[chat_num].user_num[temp];
if(mt8924_req(i,chat_num,0) != IDLE)
{
connect(i,user_e1[i].user_mix);
connect(((user_e1[i].user_mix + 1 - 0xe0) % 32) + 0xe0,i);
}
}
}
}
}
unsigned char common_yukong_req(unsigned char chat_num,unsigned char user_num)//当公共聊天室由4人到5人时,申请5个语控资源
{
unsigned char xdata temp,i;
for(temp = 0;temp < 16;temp++)
{
if(chat_common_resource[chat_num].user_num[temp] != IDLE)
{
if(yukong_req(chat_common_resource[chat_num].user_num[temp]) == IDLE)
{
return(0);
}
}
}
if(yukong_req(user_num) == IDLE)
{
return(0);
}
return(1);
}
void audio_control(unsigned char yukong_num,unsigned char chat_num)//语音控制
{
unsigned char xdata temp;
temp = XBYTE[yukong_resource[yukong_num].addr];
temp = (temp >> (yukong_num % 8)) & 0x01;
iii = yukong_num;
if(temp == 1)
{
iii = yukong_num;
yukong_resource[yukong_num].state = AUDIO_YES;
yukong_resource[yukong_num].count = 0;
}
else
{
if(yukong_resource[yukong_num].state == AUDIO_YES)
{
yukong_resource[yukong_num].count++;
if(yukong_resource[yukong_num].count > 20)
{
yukong_resource[yukong_num].state = AUDIO_NO;
yukong_resource[yukong_num].count = 0;
}
}
}
if((yukong_resource[yukong_num].state == AUDIO_YES) && (user_e1[yukong_resource[yukong_num].user].user_mix == IDLE))
{
mt8924_req(yukong_resource[yukong_num].user,chat_num,1);
}
}
unsigned char add_user_common(unsigned char user_num,unsigned char password[6],unsigned char chat_type)//公共聊天室加入会员
{
unsigned char xdata temp,i,flag;
temp = ask_common(chat_type,password);//查询是否有此聊天室
if((temp != IDLE) && (temp != 8))//有,而且没满
{
if(chat_common_resource[temp].user_count < 4)//无须启动语控资源
{
i = assign_common_num(temp);//分配聊天室中用户的号码
chat_common_resource[temp].user_num[i] = user_num;//置此聊天号对应的用户
user_e1[user_num].user_num = i;//置此用户在聊天室中对应的号码
user_e1[user_num].chat_num = 0x80 + temp;//置此用户对应的聊天室号
chat_common_resource[temp].user_count++;//此聊天室人数加1
//王后台回应用户状态
command(7,0,0,temp,chat_type,((password[0] << 4) & 0xf0) + (password[1] & 0x0f),((password[2] << 4) & 0xf0) + (password[3] & 0x0f),((password[4] << 4) & 0xf0) + (password[5] & 0x0f),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);
mt8924_req(user_num,temp,0);//将该用户加入语音混合
}
else//需要启动语控资源
{
if(chat_common_resource[temp].user_count == 4)//由4人到5人时需要申请5个语控资源
{
if(common_yukong_req(temp,user_num) == 1)//申请到5个语控资源
{
i = assign_common_num(temp);//分配聊天室中用户的号码
chat_common_resource[temp].user_num[i] = user_num;//置此聊天号对应的用户
user_e1[user_num].user_num = i;//置此用户在聊天室中对应的号码
user_e1[user_num].chat_num = 0x80 + temp;//置此用户对应的聊天室号
chat_common_resource[temp].user_count++;//此聊天室人数加1
//往后台回应用户状态
command(7,0,0,temp,chat_type,((password[0] << 4) & 0xf0) + (password[1] & 0x0f),((password[2] << 4) & 0xf0) + (password[3] & 0x0f),((password[4] << 4) & 0xf0) + (password[5] & 0x0f),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);
mt8924_release(user_num,temp,1);
}
else//语控资源不足
{
common_yukong_release(temp,user_num,0);
return(IDLE);
}
}
else//聊天室多于4人时,只须新加入的成员申请语控
{
if(yukong_req(user_num) != IDLE)//申请到语控资源
{
i = assign_common_num(temp);//分配聊天室中用户的号码
chat_common_resource[temp].user_num[i] = user_num;//置此聊天号对应的用户
user_e1[user_num].user_num = i;//置此用户在聊天室中对应的号码
user_e1[user_num].chat_num = 0x80 + temp;//置此用户对应的聊天室号
chat_common_resource[temp].user_count++;//此聊天室人数加1
//往后台回应用户状态
command(7,0,0,temp,chat_type,((password[0] << 4) & 0xf0) + (password[1] & 0x0f),((password[2] << 4) & 0xf0) + (password[3] & 0x0f),((password[4] << 4) & 0xf0) + (password[5] & 0x0f),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);
}
else//语控资源不足
{
return(IDLE);
}
}
}
return(temp);
}
else
{
if(temp == 8)
{
return(IDLE);
}
else//没有
{
return(chat_common_req(user_num,password,chat_type));//申请新建聊天室
}
}
}
chat_common_release(unsigned char chat_num)//释放公共聊天室资源
{
unsigned char xdata temp;
chat_common_count++;
//往后台回应聊天室状态
command(6,0,1,chat_num,chat_common_resource[chat_num].type,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
chat_common_resource[chat_num].flag = LEISURE;
chat_common_resource[chat_num].type = IDLE;
chat_common_resource[chat_num].user_count = 0;
for(temp = 0;temp < 16;temp++)
{
chat_common_resource[chat_num].user_num[temp] = IDLE;
}
for(temp = 0;temp < 6;temp++)
{
chat_common_resource[chat_num].password[temp] = IDLE;
}
}
reduce_user_common(unsigned char chat_num,unsigned char user_num)//用户退出此聊天室
{
unsigned char xdata temp,password[3];
for(temp = 0;temp < 3;temp++)
{
password[temp] = ((user_e1[user_num].password[2 * temp] << 4) & 0xf0) + (user_e1[user_num].password[2 * temp + 1] & 0x0f);
}
if(chat_num != IDLE)
{
chat_common_resource[chat_num].user_count--;//聊天室人数减1
//往后台回应用户状态
command(7,0,1,chat_num,chat_common_resource[chat_num].type,password[0],password[1],password[2],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);
chat_common_resource[chat_num].user_num[user_e1[user_num].user_num] = IDLE;//将此用户从此聊天室中删除
if(user_e1[user_num].user_mix != IDLE)
{
mt8924_release(user_num,chat_num,0);//将该用户从语音混合中删除
}
if(chat_common_resource[chat_num].user_count < 5)//此聊天室此刻聊天人数是否小于5
{
if(chat_common_resource[chat_num].user_count == 0)//此聊天室此刻聊天人数是否为0
{
chat_common_release(chat_num);//是则释放此聊天室资源
}
else
{
if(chat_common_resource[chat_num].user_count == 4)//聊天室只剩下4人,释放所有语控资源
{
common_yukong_release(chat_num,user_num,1);
}
else//聊天室人数小于5人,且不为0
{
for(temp = 0;temp < 4;temp++)
{
if(chat_common_resource[chat_num].mt8924_user[temp] == user_num)
{
no_sound(chat_common_resource[chat_num].mt8924_slot[temp]);
chat_common_resource[chat_num].mt8924_user[temp] = IDLE;
}
}
}
}
}
else//至少还有5人(还需要语音检测)
{
chat_common_resource[chat_num].user_num[user_e1[user_num].user_num] = IDLE;//将此用户从此聊天室中删除
yukong_release(user_num);//释放此用户的语控资源
}
}
}
chat_private_init()//私聊初始化
{
unsigned char i,temp;
chat_private_count = 64;
for(i = 0;i < 64;i++)
{
chat_private_resource[i].flag = LEISURE;
chat_private_resource[i].user_count = 0;
for(temp = 0;temp < 2;temp++)
{
chat_private_resource[i].user_num[temp] = IDLE;
}
}
}
unsigned char chat_private_req(unsigned char user_num)//申请私人聊天室资源
{
unsigned char xdata temp,i;
if(chat_private_count == 0)//如果没有资源
{
return(IDLE);
}
else//还有空闲资源
{
for(temp = 0;temp < 64;temp++)
{
if(chat_private_resource[temp].flag == LEISURE)//寻找空闲资源
{
chat_private_count--;//剩余资源减1
//往后台回应聊天室状态
command(6,1,0,temp,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE,IDLE);
//往后台回应用户状态
command(7,1,user_e1[user_num].user_sex,user_e1[user_num].user_age,user_e1[user_num].opp_sex,user_e1[user_num].opp_age,0,temp,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);
chat_private_resource[temp].flag = OCCUPY;//置占用标志
chat_private_resource[temp].user_num[chat_private_resource[temp].user_count] = user_num;//置用户号
user_e1[user_num].user_num = chat_private_resource[temp].user_count;//置用户对应聊天室中的号码号
user_e1[user_num].chat_num = temp;//置用户聊天室号
user_e1[user_num].opp_num = IDLE;
chat_private_resource[temp].user_count = 1;//聊天室中的人数加1
return(temp);
}
}
}
}
unsigned char assign_private_num(unsigned char chat_num)//分配聊天室中用户的号码
{
unsigned char xdata temp;
for(temp = 0;temp < 2;temp++)
{
if(chat_private_resource[chat_num].user_num[temp] == IDLE)//聊天室中此号码是否分配
{
return(temp);
}
}
}
unsigned char ask_private(unsigned char user_num)//在线寻找有无合适的聊友
{
unsigned char xdata temp,i;
for(temp = 0;temp < 64;temp++)
{
if(chat_private_resource[temp].flag == OCCUPY)//判断此聊天室是否分配
{
if(chat_private_resource[temp].user_count == 1)//判断此聊天室是否有人在线等待
{
if(chat_private_resource[temp].user_num[0] != IDLE)//判断用户对应的聊天号
{
i = chat_private_resource[temp].user_num[0];//找到在线等待的用户
user_e1[user_num].opp_num = i;
}
else
{
i = chat_private_resource[temp].user_num[1];//找到在线等待的用户
user_e1[user_num].opp_num = i;
}
if(user_e1[i].user_sex == user_e1[user_num].opp_sex)//已经在聊天室里的用户的性别满足新进来用户的要求
{
if(user_e1[i].opp_sex == user_e1[user_num].user_sex)//新进来用户的性别满足已经在聊天室里的用户的要求
{
if(user_e1[i].opp_age == IDLE)//已经在聊天室里的用户对聊友没有年龄要求
{
if(user_e1[user_num].opp_age == IDLE)//新进来的用户对聊友的年龄没有要求
{
return(temp);//在线找到合意的聊友
}
else//新进来的用户对聊友的年龄有要求
{
//判断已经在聊天室里的用户是否满足新进来的用户的要求
if((user_e1[i].user_age > (user_e1[user_num].opp_age - 6)) && (user_e1[i].user_age < (user_e1[user_num].opp_age + 6)))
{
return(temp);//在线找到合意的聊友
}
}
}
else//已经在聊天室里的用户对聊友有年龄要求
{
if(user_e1[user_num].opp_age == IDLE)//新进来的用户对聊友的年龄没有要求
{
//判断新进来的用户是否满足已经在聊天室里的用户的要求
if((user_e1[user_num].user_age > (user_e1[i].opp_age - 6)) && (user_e1[user_num].user_age < (user_e1[i].opp_age + 6)))
{
return(temp);//在线找到合意的聊友
}
}
else//新进来的用户对聊友的年龄有要求
{
//判断新进来的用户是否满足已经在聊天室里的用户的要求
if((user_e1[user_num].user_age > (user_e1[i].opp_age - 6)) && (user_e1[user_num].user_age < (user_e1[i].opp_age + 6)))
{
//判断已经在聊天室里的用户是否满足新进来的用户的要求
if((user_e1[i].user_age > (user_e1[user_num].opp_age - 6)) && (user_e1[i].user_age < (user_e1[user_num].opp_age + 6)))
{
return(temp);//在线找到合意的聊友
}
}
}
}
}
}
}
}
}
return(IDLE);//在线没有合意的聊友
}
unsigned char add_user_private(unsigned char user_num)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -