Java tutorial
/** * Copyright 2013-2023 Xia Jun(3979434@qq.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *************************************************************************************** * * * Website : http://www.farsunset.com * * * *************************************************************************************** */ package com.farsunset.cim.sdk.server.session; import java.io.Serializable; import java.net.InetAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import com.farsunset.cim.sdk.server.constant.CIMConstant; import io.netty.channel.Channel; import io.netty.util.AttributeKey; /** * Channel, */ public class CIMSession implements Serializable { /** * */ private transient static final long serialVersionUID = 1L; public transient static String PROTOCOL = "protocol"; public transient static String WEBSOCKET = "websocket"; public transient static String NATIVEAPP = "nativeapp"; public transient static final int STATUS_ENABLED = 0; public transient static final int STATUS_DISABLED = 1; public transient static final int APNS_ON = 1; public transient static final int APNS_OFF = 0; public transient static String CHANNEL_IOS = "ios"; public transient static String CHANNEL_ANDROID = "android"; public transient static String CHANNEL_WINDOWS = "windows"; public transient static String CHANNEL_WP = "wp"; public transient static String CHANNEL_BROWSER = "browser"; private transient Channel session; private String gid;// sessionID private String nid;// session??ID private String deviceId;// ID (??+??),iosdevicetoken private String host;// session?IP private String account;// session? private String channel;// private String deviceModel;// ? private String clientVersion;// private String systemVersion;// private String packageName;// ?? private Long bindTime;// private Long heartbeat;// private Double longitude;// ? private Double latitude;// private String location;// ? private int apnsAble;// apns?? private int status;// ? public CIMSession(Channel session) { this.session = session; this.nid = session.id().asShortText(); } public CIMSession() { } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; setAttribute(CIMConstant.SESSION_KEY, account); } public Double getLongitude() { return longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } public Double getLatitude() { return latitude; } public void setLatitude(Double latitude) { this.latitude = latitude; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getGid() { return gid; } public void setGid(String gid) { this.gid = gid; } public String getNid() { return nid; } public void setNid(String nid) { this.nid = nid; } public String getDeviceId() { return deviceId; } public String getChannel() { return channel; } public void setChannel(String channel) { this.channel = channel; } public String getDeviceModel() { return deviceModel; } public void setDeviceModel(String deviceModel) { this.deviceModel = deviceModel; } public void setDeviceId(String deviceId) { this.deviceId = deviceId; } public String getHost() { return host; } public Long getBindTime() { return bindTime; } public void setBindTime(Long bindTime) { this.bindTime = bindTime; } public String getClientVersion() { return clientVersion; } public void setClientVersion(String clientVersion) { this.clientVersion = clientVersion; } public String getSystemVersion() { return systemVersion; } public void setSystemVersion(String systemVersion) { this.systemVersion = systemVersion; } public Long getHeartbeat() { return heartbeat; } public void setHeartbeat(Long heartbeat) { this.heartbeat = heartbeat; setAttribute(CIMConstant.HEARTBEAT_KEY, heartbeat); } public void setHost(String host) { this.host = host; } public void setChannel(Channel session) { this.session = session; } public int getApnsAble() { return apnsAble; } public void setApnsAble(int apnsAble) { this.apnsAble = apnsAble; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public void setAttribute(String key, Object value) { if (session != null) session.attr(AttributeKey.valueOf(key)).set(value); } public boolean containsAttribute(String key) { if (session != null) return session.hasAttr(AttributeKey.valueOf(key)); return false; } public Object getAttribute(String key) { if (session != null) return session.attr(AttributeKey.valueOf(key)).get(); return null; } public void removeAttribute(String key) { if (session != null) session.attr(AttributeKey.valueOf(key)).set(null); ; } public SocketAddress getRemoteAddress() { if (session != null) return session.remoteAddress(); return null; } public boolean write(Object msg) { if (session != null && session.isActive()) { return session.writeAndFlush(msg).awaitUninterruptibly(5000); } return false; } public boolean isConnected() { if (session != null) { return session.isActive(); } if (!isLocalhost()) { return status == STATUS_ENABLED; } return false; } public boolean isLocalhost() { try { String ip = InetAddress.getLocalHost().getHostAddress(); return ip.equals(host); } catch (UnknownHostException e) { e.printStackTrace(); } return false; } public void closeNow() { if (session != null) session.close(); } public void setPackageName(String packageName) { this.packageName = packageName; } public String getPackageName() { return packageName; } public int hashCode() { return (deviceId + nid + host).hashCode(); } public boolean equals(Object o) { if (o instanceof CIMSession) { return hashCode() == o.hashCode(); } return false; } public boolean fromOtherDevice(Object o) { if (o instanceof CIMSession) { CIMSession t = (CIMSession) o; if (t.deviceId != null && deviceId != null) { return !t.deviceId.equals(deviceId); } } return false; } public boolean fromCurrentDevice(Object o) { return !fromOtherDevice(o); } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("{"); buffer.append("\"").append("gid").append("\":").append("\"").append(gid).append("\"").append(","); buffer.append("\"").append("nid").append("\":").append(nid).append(","); buffer.append("\"").append("deviceId").append("\":").append("\"").append(deviceId).append("\"").append(","); buffer.append("\"").append("host").append("\":").append("\"").append(host).append("\"").append(","); buffer.append("\"").append("account").append("\":").append("\"").append(account).append("\"").append(","); buffer.append("\"").append("channel").append("\":").append("\"").append(channel).append("\"").append(","); buffer.append("\"").append("deviceModel").append("\":").append("\"").append(deviceModel).append("\"") .append(","); buffer.append("\"").append("status").append("\":").append(status).append(","); buffer.append("\"").append("apnsAble").append("\":").append(apnsAble).append(","); buffer.append("\"").append("bindTime").append("\":").append(bindTime).append(","); buffer.append("\"").append("heartbeat").append("\":").append(heartbeat); buffer.append("}"); return buffer.toString(); } }