📄 httpconnector.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.*;
/**
* HTTP连接器
* @author 贾永明
* @version 2.8.0
* @since HuoHouStudioEngine1.0
*/
final class HttpConnector implements NetworkListener{
/**
* HTTP连接器是否启动,true:启动,false:不启动。
*/
private boolean isStartup;
/**
* 当前HTTP连接的事件主体。
*/
private byte[] eventBody;
/**
* 特殊字符‘/’在联网的url中的索引,注意如果字符‘/’没有被找到,即url.indexOf(‘/’) = -1的时候,该参数会被定义到url的末端。
*/
private int chAt;
/**
* constructor。
*/
HttpConnector(){
chAt = NetworkManager.url.indexOf('/');
if(chAt == -1){
chAt = NetworkManager.url.length();
}
}
/**
* 加入网络事件。
* @param <b>_eventBody</b> 加入的网络事件的事件主体,具体由使用者自己写入。
* @throws Exception 一切可能产生的异常。
*/
public synchronized final void addEvent(byte[] _eventBody) throws Exception{
eventBody = _eventBody;
notify();
}
/**
* 关闭监听。
*/
public synchronized final void terminate(){
isStartup = false;
//关闭所有的流
NetworkManager.closeAllIO();
notify();
}
/**
* 网络管理器主体。<br>
* 如果网络引擎还没有启动,运行到此会被忽略。
*/
public final void run(){
if(NetworkManager.isStartup){
isStartup = true;
while(isStartup){
try{
//没有事件并且没有得到退出指令的时候就等待
while(eventBody == null && isStartup){
synchronized(this){
wait();
}
}
if(!isStartup){
break;
}
//正式打开HTTP网络连接
if(NetworkManager.connectionMode == NetworkManager.AGENT_CONNECTION_MODE){
NetworkManager.streamConnection = (StreamConnection)Connector.open("http://10.0.0.172:80" + NetworkManager.url.substring(chAt), Connector.READ_WRITE, true);
((HttpConnection)(NetworkManager.streamConnection)).setRequestProperty("X-Online-Host", NetworkManager.url.substring(0, chAt));
((HttpConnection)(NetworkManager.streamConnection)).setRequestProperty("Accept", "*/*");
}else if(NetworkManager.connectionMode == NetworkManager.DIRECT_CONNECTION_MODE){
NetworkManager.streamConnection = (StreamConnection)Connector.open("http://" + NetworkManager.url, Connector.READ_WRITE, true);
}
((HttpConnection)(NetworkManager.streamConnection)).setRequestMethod(HttpConnection.POST);
//打开请求流
NetworkManager.request = NetworkManager.streamConnection.openDataOutputStream();
//写入数据
NetworkManager.request.write(eventBody);
//正式建立HTTP网络连接
NetworkManager.responseCode = ((HttpConnection)(NetworkManager.streamConnection)).getResponseCode();
if(NetworkManager.responseCode == HttpConnection.HTTP_OK){//成功联网,采用正确数据处理方法分析数据
//连接成功,失败次数清零
NetworkManager.failedTimes = 0;
NetworkConnector.removeEvents = NetworkManager.networkRequestHandle.correctDataHandle(NetworkManager.streamConnection.openDataInputStream());
}else{//联网失败,采用错误数据处理方法分析原因
NetworkConnector.removeEvents = NetworkManager.networkRequestHandle.errorDataHandle(NetworkManager.responseCode, ++NetworkManager.failedTimes);
}
}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);
}
}finally{
//关闭流
NetworkManager.closeAllIO();
//清除事件数据
eventBody = null;
System.gc();
//唤醒连接器
if(NetworkManager.networkConnector != null){
NetworkManager.networkConnector.wakeUp();
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -