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

📄 httpconnector.java

📁 j2me编写的游戏基础引擎,作为学习很不错.
💻 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 + -