package org.myalice.websocket;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import org.apache.commons.lang3.StringUtils;
import org.glassfish.jersey.internal.util.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Util {
private static SimpleDateFormat DayTimeFormater = new SimpleDateFormat("HH:mm:ss");
@SuppressWarnings("unused")
private static Logger log = LoggerFactory.getLogger(Util.class);
private static ObjectMapper mapper = new ObjectMapper();
public static <T> T parseMessage(String message, Class<T> cls) throws JsonParseException, JsonMappingException, IOException {
if (StringUtils.isEmpty(message)) {
return null;
}
return mapper.readValue(message, cls);
}
/**
* 将存储在bean中的值转为JSON字符串
* @param message
* @return
* @throws JsonProcessingException
*/
public static String formatMessage(Object message) throws JsonProcessingException {
if (message == null) {
return "";
}
return mapper.writeValueAsString(message);
}
/**
* 将聊天内容加入未发送聊天队列
* @param session
* @param message
*/
public static void setUnsetMessage(WebSocketSession session, String message) {
@SuppressWarnings("unchecked")
ArrayBlockingQueue<String> talkContent =
(ArrayBlockingQueue<String>)session.getAttributes()
.get(Constant.WS_SESSION_KEY.SESSION_KEY_UNSENT_MESSAGES);
if (talkContent != null) {
while (!talkContent.offer(message)) {
talkContent.poll();
}
}
}
/**
* 创建随机 UUID
* @return
*/
public static String randomUUID() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
/**
* 获取用户ID
* @param session
* @return
*/
public static String getUserId(WebSocketSession session) {
if (session == null) {
return null;
}
String userId = (String)session.getAttributes().get(Constant.WS_SESSION_KEY.SESSION_KEY_USER_ID);
return userId == null ? "" : userId;
}
/**
* 获取用户名
* @param session
* @return
*/
public static String getUserName(WebSocketSession session) {
if (session == null) {
return null;
}
String userName = (String)session.getAttributes().get(Constant.WS_SESSION_KEY.SESSION_KEY_USER_NAME);
return userName == null ? session.getId() : userName;
}
/**
* 获取客户端IP地址
* @param session
* @return
*/
public static String getRemoteIp(WebSocketSession session) {
if (session == null) {
return null;
}
String remoteIp = session.getRemoteAddress().getAddress().getHostAddress();
return remoteIp == null ? "" : remoteIp;
}
/**
* 获取服务端IP地址
* @param session
* @return
*/
public static String getLocalIp(WebSocketSession session) {
if (session == null) {
return null;
}
String localIp = session.getLocalAddress().getAddress().getHostAddress();
return localIp == null ? "" : localIp;
}
/**
* 生产小时:分钟:秒字符串
* @return
*/
public static String getDayTimeString() {
return DayTimeFormater.format(new Date());
}
/**
* 生成文件路径
* @return
*/
public static String imageUploadPath(String suffix) {
String uploadedFileLocation = new Object().getClass().getResource(Constant.IMAGE_UPLOAD_PATH)
.getFile()
+ randomUUID()
+ "." + suffix;
return uploadedFileLocation;
}
public static ImageMeta parseImgString(String orgImgString) {
if (StringUtils.isEmpty(orgImgString)) {
return null;
}
int suffixEnd = orgImgString.indexOf(";");
int suffixBegin = orgImgString.indexOf("/");
int contentBegin = orgImgString.indexOf(",");
if (suffixEnd == -1 || suffixBegin == -1 || contentBegin == -1 || suffixBegin >= suffixEnd) {
return null;
}
String suffix = orgImgString.substring(suffixBegin + 1, suffixEnd);
String content = orgImgString.substring(contentBegin + 1);
return new ImageMeta(suffix, content);
}
public static class ImageMeta {
private String suffix;
private String content;
public ImageMeta(String suffix, String content) {
this.suffix = suffix;
this.content = content;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
/**
* 根据Base64创建图片
* @param imgStr
* @param imgFilePath
* @return
* @throws IOException
*/
public static boolean GenerateImage(String imgStr, String imgFilePath) throws IOException {
// 对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) // 图像数据为空
return false;
byte[] image = Base64.decode(imgStr.getBytes("UTF-8"));
ByteArrayInputStream is = new ByteArrayInputStream(image);
FileUtil.writeToFile(is, imgFilePath);
return true;
}
/**
* 从web socket session中获取http session id
* @param session
* @return
*/
public static String getHttpSessionId(WebSocketSession session) {
return (String)session.getAttributes().get(HttpSessionHandshakeInterceptor.HTTP_SESSION_ID_ATTR_NAME);
}
public static void main(String[] args) throws IOException {
/*File file = new File("d:/imagesrc.png");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
byte[] midi = Base64.encode(buffer);
File file1 = new File("d:/imagetar.png");
FileOutputStream fos = new FileOutputStream(file1);
fos.write(Base64.decode(midi));
fis.close();
fos.close();*/
//String image = FileUtil.readFile("d:/image.txt", "UTF-8");
//String image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAM0AAADNCAYAAAAbvPRpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAP+lSURBVHhezL0FWFXruvavdHd3hyIGdnd3d4uKgiCISAoqokg30iCSgnQjKHbXWq7utTvOPuc78cX9f553MlxzsVlr77XPOd//87pux5xjBnOO+f7G/TzPG2OEosIIyEt55BCNkEmVpDYo9REj30t1pEx8W2OkAjRJWgqK0KZ9LF16D5YevU6f7hvSbSP6Oyxjum1Fr7MelM0IBSHbkYo/Eu/jx63oPaTniccUlGBJf8+c3leSBT0uyVw8n1/7g6S/IdMI2CrKZE+fx5E+jxPJhfa7Dsqd3tNDSQljVFXgpqwIJ3qevRI9pqECD30NTDTVxxQLA8ywMMQMMwNMN9bGVF11TNNSwQwNZczSVMIcDSUs0FDEQrq9REsJS7WVsVxHCSt1FLHOYCS2GI3EbmMFHDIdieOmCjhlroAoawXE2oxEoq0i0uxGIttBCVedlJDnrCh01UkBWbRNcVHBFWcVxNor4ry9AmLsFBFpp4RQWyUEk/ytlHDcShlHLJRw0FwJe02VsMtEAdvo7201VsIGI2WsNlTGSn1FLNNXwBJ9ZSyk+3MNlDGD9k3VVsJk+qwTtVXgpaWM8fSdxqop0jFRgKvKSDhrqcFOWxWOmqpwoGPiSMfJXlkJdgr8G42U/X6DsqB9FiOVYELtg2WsqAhD+h1+Tgb0O/6s6H0k6VNbYOnRfkm69Bv+nHR+QlqD0hgidWof/79CY0K3/xY0dgSGOPC0X3re++fyD0G3fwoa1t8Djd3PQMMaRT/2KCVFuFJDcaD7/FxnNSW4a6tjrIEWxhtpYYqJLqYa62Ia3Z6mp4EZOmqYxSJQ5moqYz5tF1GjGwrNBv2R2DoIzUGTEfClBh1kNhKRViNxwXoEEgiCVHsZNHnOysh3kYHD0GSSkmlfvJMyLtgp4BzBFW2rgAgC7YyNIk6RhkKzx0QRO4xGiL+52VCBoFUUwCzXHYmleiOxWI8ANyDQ9ZUwXU9BQDNJW1EAM4G+AwMzhmAZRcfAhY8bHQcbdYKEtnaqijJg6FgxMOL4Dv6OfOz5BMfQmNL9/2poJGD+n4KGpUIaCo0kDRIDIw+NLolhYRmQDOm+EW3ZYVh/DzT2isrvwZGHhsWvNaP3kyRBwz8Oy4o+x9+Cxo6+889B40aSh4adxoGez9CMImg8yFU89TUx0VALkwigyfrqmExn3ql0Zp5J29nU2H4KmlW6SthooIDthiOxV0CjgOPGIwU0EZYjcN5qBBLtlZDmQK5CYOS5qpDIcVwUkeM0EumOI5FE7nPJgVzGloCxGYGz5E7hNgoIIacKJPAYmmOWSjhsroj95GK7CJZtBiOwSX8ENuiNwFpylxUExzKdEVhMWqijgHl0f5YuAUP3p2gpvodmnCYBo0bHQll2XPhYWZPrWtB9a2X6/Ui2ioMOQ49L0PCxlqAxH6H4HhrWcKDIa1hQ5PUzwPy3QaNA/8lLiR6Ql7Kc/l5otOmgMDB/Cxpu6L8EGn5MBgu/bgQsSaaDksD5ETCKSuLH+jlobOlz2DI4tGWxkziSnAfFwIyms+coVWW4qSjBWUURLqpKcKNwhKEZQ64yTl8LXgYEDsHjRe7CZ+SJ6oqYTJpJtxmceQTLgmGg2Uxh0A5DJew3Jjeg0OmEqSJOm1F4ZjlSFp4RNKlOisgih8l1kynbRQEZji