📄 socketconnector.java
字号:
package engine.optional.network;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.io.*;
import java.util.*;
import java.io.*;
import engine.kernel.*;
/**
* Socket连接器
* @author 贾永明
* @version 2.8.0
* @since HuoHouStudioEngine1.0
*/
final class SocketConnector implements NetworkListener{
/**
* Socket连接器是否启动,true:启动,false:不启动。
*/
private boolean isStartup;
/**
* constructor。
*/
SocketConnector(){
try{
NetworkManager.streamConnection = (StreamConnection)Connector.open("socket://" + NetworkManager.url, Connector.READ_WRITE, true);
//打开请求流
NetworkManager.request = NetworkManager.streamConnection.openDataOutputStream();
//打开响应流
NetworkManager.response = NetworkManager.streamConnection.openDataInputStream();
}catch(Throwable t){
EngineManager.debugEngine(t, null);
//连接过程中发生了异常,需要用错误数据处理方法分析原因
try{
NetworkConnector.removeEvents = NetworkManager.networkRequestHandle.errorDataHandle((t instanceof ConnectionNotFoundException ? NetworkManager.INVALID_CONNECTION_ERROR : NetworkManager.CONNECTED_DATA_ERROR), ++NetworkManager.failedTimes);
}catch(Throwable tt){
EngineManager.debugEngine(tt, null);
}
}
}
/**
* 加入网络事件。
* @param <b>_eventBody</b> 加入的网络事件的事件主体,具体由使用者自己写入。
* @throws Exception 一切可能产生的异常。
*/
public final void addEvent(byte[] _eventBody) throws Exception{
try{
if(NetworkManager.request != null){//socket连接直接写入请求数据
NetworkManager.request.write(_eventBody);
}
}finally{
//唤醒连接器
NetworkManager.networkConnector.wakeUp();
}
}
/**
* 关闭监听。
*/
public final void terminate(){
isStartup = false;
//关闭所有的流
NetworkManager.closeAllIO();
}
/**
* 网络管理器主体。<br>
* 如果网络引擎还没有启动,运行到此会被忽略。
*/
public final void run(){
if(NetworkManager.isStartup){
isStartup = true;
while(isStartup){
try{
//连接成功,失败次数清零
NetworkManager.failedTimes = 0;
NetworkConnector.removeEvents = NetworkManager.networkRequestHandle.correctDataHandle(NetworkManager.response);
}catch(Throwable t){
EngineManager.debugEngine(t, null);
if(!(t instanceof InterruptedIOException)){
//连接过程中发生了异常,需要用错误数据处理方法分析原因
try{
NetworkConnector.removeEvents = NetworkManager.networkRequestHandle.errorDataHandle((t instanceof ConnectionNotFoundException ? NetworkManager.INVALID_CONNECTION_ERROR : NetworkManager.CONNECTED_DATA_ERROR), ++NetworkManager.failedTimes);
}catch(Throwable tt){
EngineManager.debugEngine(tt, null);
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -