com.farsunset.cim.sdk.server.session.CIMSession.java Source code

Java tutorial

Introduction

Here is the source code for com.farsunset.cim.sdk.server.session.CIMSession.java

Source

/**
 * 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();

    }

}