基于JavaEye-API实现的Gerry-聊天Dos版v1.0
目录结构如下:
--bean
----------MessageBean.java
----------ReceiveBean.java
----------SenderBean.java
---je
----------ClientUtilsMain.java
----------ReadThread.java
---lib
----------commons-beanutils-1.8.0.jar
----------commons-codec-1.3.jar
----------commons-collections-3.2.1.jar
----------commons-lang-2.4.jar
----------commons-logging-1.1.1.jar
----------ezmorph-1.0.6.jar
----------httpclient-4.0-beta2.jar
----------httpcore-4.0-beta3.jar
----------json-lib-2.3-jdk15.jar
---tools
----------ClientUtils.java
----------Native2AsciiUtils.java
----------TimeUtil.java
1.
json-lib-2.3-jdk15.jar
http://sourceforge.net/projects/json-lib/files
2.
http-client , http-core
http://hc.apache.org/
3.ezmorph-1.0.3.jar,commons-lang.jar,commons-logging.jar,commons-beanutils.jar,commons-collections-3.2.jar
可以下载jar包的网站http://www.docjar.com/
MessageBean.javapackage bean; public class MessageBean { private String system_notice ; private String created_at ; private String plain_body ; private String title ; private String id ; private String has_read ; private String attach ; private SenderBean sender ; private ReceiveBean receiver ; public String getAttach() { return attach; } public void setAttach(String attach) { this.attach = attach; } public String getCreated_at() { return created_at; } public void setCreated_at(String created_at) { this.created_at = created_at; } public String getHas_read() { return has_read; } public void setHas_read(String has_read) { this.has_read = has_read; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPlain_body() { return plain_body; } public void setPlain_body(String plain_body) { this.plain_body = plain_body; } public ReceiveBean getReceiver() { return receiver; } public void setReceiver(ReceiveBean receiver) { this.receiver = receiver; } public SenderBean getSender() { return sender; } public void setSender(SenderBean sender) { this.sender = sender; } public String getSystem_notice() { return system_notice; } public void setSystem_notice(String system_notice) { this.system_notice = system_notice; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
ReceiveBean.javapackage bean; public class ReceiveBean { private String name ; private String logo ; private String domain ; public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } public String getLogo() { return logo; } public void setLogo(String logo) { this.logo = logo; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
SenderBean.javapackage bean; public class SenderBean { private String name ; private String logo ; private String domain ; public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } public String getLogo() { return logo; } public void setLogo(String logo) { this.logo = logo; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
ClientUtilsMain.javapackage je; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List; import net.sf.json.JSONArray; import org.apache.http.client.ClientProtocolException;
import tools.ClientUtils;
import tools.Native2AsciiUtils;
import tools.TimeUtil;
import bean.MessageBean; /** * * Notes:Main Class * Created:2010-8-9 * @author:Gerry * @version:1.0 */
public class ClientUtilsMain { /*User param setting*/ private static String user_name = "11" ; private static String user_pass = "11" ; private static String receive_name = "11" ; private static boolean isproxy = true ; private static final String NOTICE_STR = "Notice: `.refresh; 1.shownew ; 2.send ;3.history; 4.cls screen ; 5.help ; 6.exit" ; /*System param*/ //The JE only can show fifteen rows by api public static List<MessageBean> listBean = new ArrayList<MessageBean>(); public static String last_update_time = "2000/01/01 00:00:00.00" ; /** * @param args * @throws Exception * @throws Exception */ @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { System.out.println("please input your username:"); BufferedReader stdin1 =new BufferedReader(new InputStreamReader(System.in)); String str1=stdin1.readLine(); if(!str1.equals("")){user_name = str1 ;} System.out.println("please input your password:"); String str2=stdin1.readLine(); if(!str2.equals("")){user_pass = str2 ;} System.out.println("please input your receivename:"); String str3=stdin1.readLine(); if(!str3.equals("")){receive_name = str3 ;} clsScreen(); showNotice(); //Read line ReadThread readThread = new ReadThread(); readThread.start(); while(true){ System.out.println("+++++++++++++++++++++++++++++++++++"); String str=stdin1.readLine(); if(str!=null){ if(str.equals("`") || str.equals("refresh")){ receiveNewMessage(); } if(str.equals("1")){ showLastListMsg(); } if(str.equals("2")){ System.out.println("please wait..."); sendMessage(); clsScreen(); showNotice(); } if(str.equals("3")){ System.out.println("please wait..."); receiveMessage(); } if(str.equals("4") || str.equals("cls")){ //Process k = Runtime.getRuntime().exec("cmd /c cls"); clsScreen(); } if(str.equals("5") || str.equals("help")){ showNotice(); } if(str.equals("6") || str.equals("exit")){ readThread.stop(); break; } } } } public static List<MessageBean> showLastListMsg(){ for(int i=0;i<listBean.size();i++){ MessageBean bean = listBean.get(i); Timestamp stamp1 = TimeUtil.getTimeFromString(bean.getCreated_at()); Timestamp stamp2 = TimeUtil.getTimeFromString(last_update_time); long diff = TimeUtil.timeDiff2Timestamp(stamp1, stamp2); if(diff>0){ last_update_time = bean.getCreated_at();//取最后一条记录的时间 } System.out.println("No."+(i+1)+": ["+bean.getCreated_at()+"] "+bean.getSender().getName()+" :"+bean.getPlain_body()); } for(int i=0;i<listBean.size();i++){ listBean.remove(i); i--; } return listBean ; } public static String receiveMessage(){ String strResult = null; try { strResult = ClientUtils.getJsonContent("api.iteye.com","api/messages/inbox", user_name,user_pass,isproxy); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //Use JSON-LIB parse data JSONArray jsonArray = JSONArray.fromObject(Native2AsciiUtils.ascii2Native(strResult)); MessageBean[] beans = (MessageBean[])JSONArray.toArray(jsonArray, MessageBean.class); for(int i=0;i<beans.length;i++){ System.out.println("No."+(i+1)+": ["+beans[i].getCreated_at()+"] "+beans[i].getSender().getName()+" :"+beans[i].getPlain_body()); } return Native2AsciiUtils.ascii2Native(strResult); } public static int receiveNewMessage(){ String strResult = null; try { strResult = ClientUtils.getJsonContent("api.iteye.com","api/messages/inbox", user_name,user_pass,isproxy); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } strResult = Native2AsciiUtils.ascii2Native(strResult); JSONArray jsonArray = JSONArray.fromObject(Native2AsciiUtils.ascii2Native(strResult)); MessageBean[] beans = (MessageBean[])JSONArray.toArray(jsonArray, MessageBean.class); for(int i=0;i<listBean.size();i++){ listBean.remove(i); i--; } for(int i=0;i<beans.length;i++){ Timestamp stamp1 = TimeUtil.getTimeFromString(beans[i].getCreated_at()); Timestamp stamp2 = TimeUtil.getTimeFromString(last_update_time); long diff = TimeUtil.timeDiff2Timestamp(stamp1, stamp2); if(diff > 0){ listBean.add(beans[i]); } } if(listBean.size()>0){ System.out.println("Notice: There is "+listBean.size()+" to press 1 shownew!"); } return 1 ; } public static String sendMessage() throws Exception { String str=null; String strResult = null; System.out.println("Please input the text:"); BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); str=stdin.readLine(); try { //The third param is true for proxy,false for no proxy . strResult = ClientUtils.getJsonContent("api.iteye.com","api/messages/create?title=Message:&receiver_name="+receive_name+"&body="+str, user_name,user_pass,isproxy); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(Native2AsciiUtils.ascii2Native(strResult)); return "" ; } public static String showNotice(){ System.out.println(NOTICE_STR); return "" ; } public static String clsScreen(){ for(int i=0;i<10;i++){ System.out.println(""); } return "" ; } }
ReadThread.javapackage je; public class ReadThread extends Thread{ public long times = 30000L ; //30000ms public ReadThread(){} @SuppressWarnings("static-access") public void run() { while(true){ ClientUtilsMain.receiveNewMessage();//程序后台接收数据 try { this.sleep(times); } catch (InterruptedException e) { e.printStackTrace(); } } } }
ClientUtils.javapackage tools; import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScheme;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.AuthState;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils; public class ClientUtils { /** * 基于Basic认证的httpclient 连接 * @param hostUrl 要请求的host name 如:http://api.iteye.com/api/twitters/list -> api.iteye.com * @param getUrl 要请求的get url 如:http://api.iteye.com/api/twitters/list -> api/twitters/list * @param userName username * @param password password * @param isProxy isProxy * @return javaeye api 返回的json字符串 * @throws IOException * @throws ClientProtocolException */ public static String getJsonContent(String hostUrl,String getUrl,String userName,String password,boolean isProxy) throws ClientProtocolException, IOException{ String jsonStr=""; getUrl = getUrl.replaceAll(" ", ","); DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.getCredentialsProvider().setCredentials(new AuthScope(hostUrl, 80), new UsernamePasswordCredentials(userName, password)); BasicHttpContext localcontext = new BasicHttpContext(); BasicScheme basicAuth = new BasicScheme(); localcontext.setAttribute("preemptive-auth", basicAuth); httpclient.addRequestInterceptor((HttpRequestInterceptor) new PreemptiveAuth(), 0); HttpHost targetHost = new HttpHost(hostUrl); //Set proxy if(isProxy){ HttpHost proxy = new HttpHost("openproxy.xxx.com",8080); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); } HttpGet httpget = new HttpGet("/" + getUrl); HttpResponse response = httpclient.execute(targetHost, httpget, localcontext); HttpEntity entity = response.getEntity(); if (entity != null) { jsonStr = EntityUtils.toString(entity); //System.out.println(jsonStr); entity.consumeContent(); } httpclient.getConnectionManager().shutdown(); return jsonStr; } static class PreemptiveAuth implements HttpRequestInterceptor { public void process(final HttpRequest request,final HttpContext context) throws HttpException, IOException { AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); // If no auth scheme avaialble yet, try to initialize it preemptively if (authState.getAuthScheme() == null) { AuthScheme authScheme = (AuthScheme) context.getAttribute("preemptive-auth"); CredentialsProvider credsProvider = (CredentialsProvider) context.getAttribute(ClientContext.CREDS_PROVIDER); HttpHost targetHost = (HttpHost) context.getAttribute( ExecutionContext.HTTP_TARGET_HOST); if (authScheme != null) { Credentials creds = credsProvider.getCredentials( new AuthScope( targetHost.getHostName(), targetHost.getPort())); if (creds == null) { throw new HttpException("No credentials for preemptive authentication"); } authState.setAuthScheme(authScheme); authState.setCredentials(creds); } } } } }
Native2AsciiUtils.javapackage tools; /** * 仿照JDK-native2ascii.exe功能实现的(Java源代码) * Unicode编码转码 * 2010-08-06 * @author Gerry * @version 1.0 */
public class Native2AsciiUtils { /** * prefix of ascii string of native character */ private static String PREFIX = "\\u"; /** * Native to ascii string. It's same as execut native2ascii.exe. * @param str * native string * @return ascii string */ public static String native2Ascii(String str) { char[] chars = str.toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < chars.length; i++) { sb.append(char2Ascii(chars[i])); } return sb.toString(); } /** * Native character to ascii string. * @param c * native character * @return ascii string */ private static String char2Ascii(char c) { if (c > 255) { StringBuilder sb = new StringBuilder(); sb.append(PREFIX); int code = (c >> 8); String tmp = Integer.toHexString(code); if (tmp.length() == 1) { sb.append("0"); } sb.append(tmp); code = (c & 0xFF); tmp = Integer.toHexString(code); if (tmp.length() == 1) { sb.append("0"); } sb.append(tmp); return sb.toString(); } else { return Character.toString(c); } } /** * Ascii to native string. It's same as execute native2ascii.exe -reverse. * @param str * ascii string * @return native string */ public static String ascii2Native(String str) { StringBuilder sb = new StringBuilder(); int begin = 0; int index = str.indexOf(PREFIX); while (index != -1) { sb.append(str.substring(begin, index)); sb.append(ascii2Char(str.substring(index, index + 6))); begin = index + 6; index = str.indexOf(PREFIX, begin); } sb.append(str.substring(begin)); return sb.toString(); } /** * Ascii to native character. * @param str * ascii string * @return native character */ private static char ascii2Char(String str) { if (str.length() != 6) { throw new IllegalArgumentException("Ascii string of a native character must be 6 character."); } if (!PREFIX.equals(str.substring(0, 2))) { throw new IllegalArgumentException("Ascii string of a native character must start with \"\\u\"."); } String tmp = str.substring(2, 4); int code = Integer.parseInt(tmp, 16) << 8; tmp = str.substring(4, 6); code += Integer.parseInt(tmp, 16); return (char) code; } }
TimeUtil.javapackage tools; import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale; public class TimeUtil { /** * * Notes: 格式转换 * @param strTime * @return * Created:2010-8-11 * @author:Gerry */ public static Timestamp getTimeFromString(Object strTime) { SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.ENGLISH); Date date = new Date(); if (!strTime.equals("")) { try { String s=strTime.toString(); if(s.indexOf(".")!=-1){ if(s.substring(s.indexOf(".")).length()>4){ s=s.substring(0, s.indexOf(".")+4); } } date = format.parse(s); } catch (ParseException e) { e.printStackTrace(); } } Timestamp t = new Timestamp(date.getTime()); return t; } /** * 计算指定的两个时间的时间差数值 * @param time * @param anotherTime "2009-12-12 00:55:25.000 " * 前面的时间减去后面的时间 * @return */ public static long timeDiff2Timestamp(Timestamp time, Timestamp anotherTime) { long timeDiff = 1000;// 时间的差数值 timeDiff = time.getTime()-anotherTime.getTime(); return timeDiff; } /** * 当前时间 * Notes:TODO Please specify the functions of the method. * @return * Created:2010-8-11 * @author:Gerry */ public static String getCurrentTimeString() { return getCurrentTimeByFormat("yyyy/MM/dd HH:mm:ss"); } private static String getCurrentTimeByFormat(String format) { GregorianCalendar calendar = new GregorianCalendar(); java.util.Date date = calendar.getTime(); SimpleDateFormat sformat = new SimpleDateFormat(format); String currentDate = sformat.format(date); return currentDate; } }
基于JavaEye-API实现的Gerry-聊天Dos版v1.0相关推荐
- 基于云开发的微信答题活动小程序v1.0搭建部署帮助文档
11月是全国"119"消防宣传月,不少企事业单位都会举办消防安全知识竞答活动,因此我基于云开发搭建了消防安全知识答题活动小程序. 接着,还写完了初阶的手把手教你搭建答题活动小程序系 ...
- 基于组态王6.55的实时数据采集助手V1.0
采集助手V1.0使用说明 采集助手V1.0是基于北京亚控科技的组态王6.55开发的,用于对带485通讯功能的流量计.电能表等智能仪表的实时数据进行采集的程序,可将采集到的数据记录为xls电子表格形式, ...
- API接口调用--历史上的今天(v1.0)
历史上的今天 参考(聚合数据):https://www.juhe.cn/docs/api/id/63 事件列表(v1.0) 接口地址: http://api.juheapi.com/japi/toh ...
- 最新大米API短链接生成网站源码v1.0版
介绍: 大米API短连接生成源码v1.0,采用主站接口,提供链接+二维码生成方案,欢迎体验! 1.增加TCN,URLCN,SUO,MRW 四种接口 2.优化静态资源加载速度 3.抛弃assets文件夹 ...
- 基于WIN32 API实现黄金矿工游戏单人版
三.游戏功能设计 1.开屏 显示内容: 程序启动后,显示初始化图片,计时结束,进入菜单界面. 逻辑处理: 控制图片从左至右显示. 2.菜单 显示内容: 显示菜单背景图片,显示"开始" ...
- [源码和文档分享]基于WIN32 API实现黄金矿工游戏单人版
三.游戏功能设计 1.开屏 显示内容: 程序启动后,显示初始化图片,计时结束,进入菜单界面. 逻辑处理: 控制图片从左至右显示. 2.菜单 显示内容: 显示菜单背景图片,显示"开始" ...
- dos模拟器即时存档工具_dos模拟器安卓下载-DOS模拟器 安卓版v1.0.60-PC6安卓网
Magic Dosbox app,这是一款让你重温儿时记忆的游戏模拟工具,在DOS模拟器安卓版app你可运行儿时游戏,享受记忆中的游戏体验. 基本简介 (Magic Dosbox)DOS模拟器安卓版a ...
- HitPaw Photo Enhancer(图片无损放大软件)官方正式版V1.0.1.7 | 基于ai人工智能图片清晰算法的增强照片清晰度的软件
HitPaw Photo Enhancer 是一款优秀的图片无损放大软件,采用了先进的ai人工智能图片清晰放大技术,只需三步就能帮助用户一键放大图片并修复模糊的图像使之质量更好,也就是大家常说的增强照 ...
- 基于云开发的答题活动小程序v1.0,开开开源啦
基于云开发的微信答题活动小程序v1.0,开开开源啦!!!这个答题小程序,技术栈是基于云开发的微信原生小程序. 搭建教程系列文章 11月是全国"119"消防宣传月,不少企事业单位会举 ...
- 基于图灵api实现微信聊天机器人
基于图灵api实现微信聊天机器人 尝试了一下最近很火的聊天机器人,记录下实现过程. 微信公众平台提供的接口很简单,先看看消息交互流程: 说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给 ...
最新文章
- 在SD/MMC卡上实现hive (Implement WinCE HIVEROM system on NAND or SD system )
- Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
- 优秀程序员必备素质——快速调试
- std::string中的反向迭代器rbegin()和rend()
- 42 FI配置-财务会计-固定资产-组织结构-将折旧表分配至公司代码
- 华为matebook14会不会用鸿蒙,2020年用什么笔记本上网课?浅析华为MateBook 14 2020款...
- Oracle数据库中文乱码问题
- 使用盒子模型仿照优酷的页面片段
- java知识点3(null)
- (转)Locale 详解
- Ceph 撸源码系列(一):Ceph开源项目源代码的关键目录介绍
- 老男孩linux高端运维课程—linux系统目录结构知识讲解
- 小米路由r2d论坛_维修一台亮黄灯的R2D小米路由器2
- FX2N-2DA模拟量输出模块简述
- android 判断 飞行模式,Android 设置飞行模式,判断是否是飞行模式
- winedit使用教程_BCDEdit命令怎么使用?Win10下BCDEdit使用教程(包含常用参数命令)...
- php调取微信接口token上限,解决微信access_token上限问题
- Kubernetes格式化输出:custom-columns
- 关联规则 置信度定义
热门文章
- 干货 :数据科学家最常用的十种算法
- vb整合多个excel表格到一张_如何使用VB实现多个excel表格合并在一个EXCEL表格里面...
- Android手机开启开发者选项(红米note7举例)
- win10防火墙不能自动启动
- LeetCode刷题复盘笔记—一文搞懂509. 斐波那契数70. 爬楼梯以及递归时间复杂度计算方法(动态规划系列第一篇)
- Adobe Acrobat的安装时出现:服务print spooler启动失败,请确认您有足够权限启动系,打印机print spooler系统服务不能正常启用解决办法
- 3-23 实对称矩阵知识补充
- latex 背景颜色设置
- 新安装Visio2013每次打开都提示正在配置,解决办法
- 【比赛回顾】广工大2020级年ACM第一次月赛——Dio的面包工坊