📄 phonesimulator.java
字号:
redialButton.setEnabled(true);//置重播键有效
}
else//否则置重播键无效
{
redialButton.setEnabled(false);
}
hangupButton.setEnabled(false);// 挂断键无效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(false);//暂停键无效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(false);//存储键无效
Button0.setEnabled(true);//数字键全有效
Button1.setEnabled(true);
Button2.setEnabled(true);
Button3.setEnabled(true);
Button4.setEnabled(true);
Button5.setEnabled(true);
Button6.setEnabled(true);
Button7.setEnabled(true);
Button8.setEnabled(true);
Button9.setEnabled(true);
ButtonStar.setEnabled(false);// *键无效
ButtonSharp.setEnabled(true);//#键有效
break;
case(autoDialBState):
dialButton.setEnabled(false);//拨号按钮无效
//directListenToggle.setSelected(false);//未选免提键
directListenToggle.setEnabled(false);//免提键无效
redialButton.setEnabled(false);//置重播键无效
hangupButton.setEnabled(false);// 挂断键无效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(false);//暂停键无效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(false);//存储键无效
Button0.setEnabled(true);//数字键全有效
Button1.setEnabled(true);
Button2.setEnabled(true);
Button3.setEnabled(true);
Button4.setEnabled(true);
Button5.setEnabled(true);
Button6.setEnabled(true);
Button7.setEnabled(true);
Button8.setEnabled(true);
Button9.setEnabled(true);
ButtonStar.setEnabled(false);// *键无效
ButtonSharp.setEnabled(false);//#键无效
break;
case(manualDialState):
dialButton.setEnabled(false);//拨号按钮无效
directListenToggle.setEnabled(false);//免提键无效
redialButton.setEnabled(false);//重播键无效
hangupButton.setEnabled(true);// 挂断键有效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(false);//暂停键无效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(false);//存储键无效
Button0.setEnabled(true);//数字键全有效
Button1.setEnabled(true);
Button2.setEnabled(true);
Button3.setEnabled(true);
Button4.setEnabled(true);
Button5.setEnabled(true);
Button6.setEnabled(true);
Button7.setEnabled(true);
Button8.setEnabled(true);
Button9.setEnabled(true);
ButtonStar.setEnabled(true);// *键有效
ButtonSharp.setEnabled(true);//#键有效
break;
case(connectState):
dialButton.setEnabled(false);//拨号按钮无效
directListenToggle.setEnabled(false);//免提键无效
redialButton.setEnabled(false);//重播键无效
hangupButton.setEnabled(true);// 挂断键有效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(true);//暂停键有效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(true);//存储键有效
Button0.setEnabled(false);//数字键全无效
Button1.setEnabled(false);
Button2.setEnabled(false);
Button3.setEnabled(false);
Button4.setEnabled(false);
Button5.setEnabled(false);
Button6.setEnabled(false);
Button7.setEnabled(false);
Button8.setEnabled(false);
Button9.setEnabled(false);
ButtonStar.setEnabled(false);// *键无效
ButtonSharp.setEnabled(false);//#键无效
break;
}
}
/** 初始化Applet。加载声音文件,初始化界面,建立Socket连接初始化地址簿
*/
public void init() {
super.init();
refreshComponent(currentState);
busyAudio=getAudioClip(getCodeBase(),"audio/busyAudio.wav");;
ringAudio=getAudioClip(getCodeBase(),"audio/ringing.wav");
directListenAudio=getAudioClip(getCodeBase(),"audio/directListenAudio.wav");
hangUpAudio=getAudioClip(getCodeBase(),"audio/hangUpAudio.wav");
dialNonDigitAudio=getAudioClip(getCodeBase(),"audio/dialNonDigitAudio.wav");
for(int i=0;i<10;i++){
dialDigitAudio[i]=getAudioClip(getCodeBase(),"audio/"+i+".AU");
}
initPhoneText();//初始化地址簿
}
/** 开始执行Applet
*/
public void start() {
super.start();
}
/** 进入进入初始状态
* @param fromState 从哪个状态进入的初始状态
*/
private void enterInitialState(int fromState) {
currentState=initialState;//改变状态
this.refreshComponent(currentState);//改变当前的控件状态
}
/** 进入自动拨号状态A
* @param fromState 从哪个状态进入的自动拨号状态A
*/
private void enterAutoDialAState(int fromState) {
fromStateAuto=fromState;//记录从哪个状态进入自动拨号状态A
currentState=autoDialAState;
refreshComponent(currentState);
}
/** 进入自动拨号状态B
* @param fromState 从哪个状态进入的自动拨号状态B
* @param dialNum 自动拨号的号码
*/
private void enterAutoDialBState(int fromState, java.lang.String dialNum) {
if(fromState!=autoDialAState){//不从自动拨号A状态进入
fromStateAuto=fromState;//记录从哪个状态进入自动拨号状态
}
//autoDialInterrupted=false;//自动拨号进程未被中断
currentState=autoDialBState;
refreshComponent(currentState);
autoDialThread= new AutoDialWorker(dialNum);
autoDialThread.start();
}
/** 进入手动拨号状态
* @param fromState 从哪个状态进入的手动拨号状态
*/
private void enterManualDialState(int fromState) {
firstDial=false;
noOfNumber=0;
switch(fromState){
case(initialState):
currentState=manualDialState;//更新当前状态
fromStateMan=fromState;
refreshComponent(currentState);
break;
case(directListenState):
currentState=manualDialState;//更新当前状态
fromStateMan=fromState;
leaveDirectListenState();
refreshComponent(currentState);
break;
case(autoDialAState):
currentState=manualDialState;//更新当前状态
fromStateMan=fromStateAuto;
refreshComponent(currentState);
break;
case(autoDialBState):
//如果是从自动拨号状态B进入拨号的则只需更新拨号的计数,
//不用更新状态,自动拨号状态B不过是借用手动拨号的处理过程而已
break;
}
}
/** 进入连接状态
* @param fromState 从哪个状态进入的连接状态
* @param phoneNum 准备拨出的号码
*/
private void enterConnectState(int fromState, java.lang.String phoneNum) {
switch(fromState){//存储从那个初态进入连接状态的
case(manualDialState):
fromStateCon=fromStateMan;
break;
case(autoDialBState):
fromStateCon=fromStateAuto;
break;
}
lastDialNumber=phoneNum;
//记录本次拨的号码为重播作准备
phoneNumDisp.setText(phoneNum);
currentState=connectState;
refreshComponent(currentState);
//??根据概率发出电话铃声或占线声
if(Math.random() >0.5){
connectAudio=ringAudio;
}
else{
connectAudio=busyAudio;
}
connectAudio.loop();
}
/** 离开手动拨号状态
*/
private void leaveManualDialState() {
firstDial=true;//恢复firstDial的值
phoneNumDisp.setText("");//清除拨出的电话号码
}
/** 离开自动拨号状态B
*/
private void leaveAutoDialBState() {
firstDial=true;//恢复firstDial的值
phoneNumDisp.setText("");//清除拨出的电话号码
}
/** 离开手动连接状态
*/
private void leaveConnectState() {
phoneNumDisp.setText("");//清除拨出的电话号码
connectAudio.stop();//停止呼叫
}
/** 回退到某个状态
* @param toState 回退到的目的状态
*/
private void goBack(int toState) {
switch(toState){
case(initialState):
enterInitialState(currentState);
break;
case(directListenState):
enterDirectListenState(currentState);
break;
}
}
/** 进入免提状态
* @param fromState 从哪个状态进入的免提状态
*/
private void enterDirectListenState(int fromState) {
currentState=directListenState;
directListenAudio.loop();
refreshComponent(currentState);
}
/** 离开免提状态。
*/
private void leaveDirectListenState() {
directListenAudio.stop();
}
/** 初始化电话地址簿。
*/
private void initPhoneText() {
if(getCodeBase().getHost()==null){//host域为空,表示从本地主机启动
host="127.0.0.1";
}
else{
host=getCodeBase().getHost();
}
try{
System.out.println("Connect to server,Wait.....");
phoneAddSocket=new Socket(host,1200);
System.out.println("Server Conected");
phoneAddSocket.getOutputStream().write(PhoneSimulator.initialAdd);
//表示是在初始化时加载地址簿
BufferedWriter out=new BufferedWriter(
new OutputStreamWriter
(phoneAddSocket.getOutputStream()));
String path=getDocumentBase().getPath();
path=path.substring(1,path.lastIndexOf("/")+1);
out.write(path);
out.newLine();
out.flush();
System.out.println("path: "+path);
phoneAddSocket.getOutputStream().write(PhoneSimulator.readPhoneAdd);//向服务器表明想读出数据
if(phoneAddSocket.getInputStream().read()==PhoneAddServer.Approved_Operation){
//用户确认要从从磁盘中读出地址簿的初始值
BufferedReader in=new BufferedReader(
new InputStreamReader(phoneAddSocket.getInputStream()));
String add=null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -