테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
chat-server/src/com/aionemu/chatserver/model/ChatClient.java
package com.aionemu.chatserver.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.aionemu.chatserver.model.channel.Channel;
import com.aionemu.chatserver.network.netty.handler.ClientChannelHandler;

/**
 * @author ATracer, Neon
 */
public class ChatClient {

	private final int clientId;
	private final byte[] token;
	private final String accName;
	private final String name;
	private final Race race;
	private final byte accessLevel;
	private byte[] identifier;
	private ClientChannelHandler channelHandler;
	private long gagTime;

	/**
	 * Map with all connected channels<br>
	 * Support for 2 channels of ChannelType.JOB, since starting classes join both main class channels
	 */
	private final Map<ChannelType, List<Channel>> channels = new ConcurrentHashMap<>();
	private final Map<ChannelType, Long> lastMessageTime = new ConcurrentHashMap<>();

	public ChatClient(int clientId, byte[] token, String accName, String nick, Race race, byte accessLevel) {
		this.clientId = clientId;
		this.token = token;
		this.accName = accName;
		this.name = nick;
		this.race = race;
		this.accessLevel = accessLevel;
	}

	public int getClientId() {
		return clientId;
	}

	public byte[] getToken() {
		return token;
	}

	public String getAccountName() {
		return accName;
	}

	public String getName() {
		return name;
	}

	public Race getRace() {
		return race;
	}

	public byte getAccessLevel() {
		return accessLevel;
	}

	public byte[] getIdentifier() {
		return identifier;
	}

	public void setIdentifier(byte[] identifier) {
		this.identifier = identifier;
	}

	public ClientChannelHandler getChannelHandler() {
		return channelHandler;
	}

	public void setChannelHandler(ClientChannelHandler channelHandler) {
		this.channelHandler = channelHandler;
	}

	public void addChannel(Channel channel) {
		List<Channel> channelsOfType = channels.get(channel.getChannelType());
		if (channelsOfType == null) {
			channelsOfType = new ArrayList<>();
			channels.put(channel.getChannelType(), channelsOfType);
		} else if (channel.getChannelType() != ChannelType.JOB || channelsOfType.size() == 2) {
			channelsOfType.clear();
		}
		channelsOfType.add(channel);
	}

	public boolean removeChannel(Channel channel) {
		if (channel != null) {
			List<Channel> channelsOfType = channels.get(channel.getChannelType());
			if (channelsOfType != null)
				return channelsOfType.removeIf(ch -> ch.getChannelId() == channel.getChannelId());
		}
		return false;
	}

	public boolean isInChannel(Channel channel) {
		List<Channel> channelsOfType = channels.get(channel.getChannelType());
		return channelsOfType != null && channelsOfType.stream().anyMatch(ch -> ch.getChannelId() == channel.getChannelId());
	}

	public long getLastMessageTime(ChannelType ct) {
		return lastMessageTime.getOrDefault(ct, 0L);
	}

	public void updateLastMessageTime(ChannelType ct) {
		lastMessageTime.put(ct, System.currentTimeMillis());
	}

	public int nextMessageTimeSec(ChannelType ct) {
		int delay = ct == ChannelType.LFG || ct == ChannelType.TRADE ? 30000 : 1000; // implemented same as on client-side
		long floodProtectionTime = delay - (System.currentTimeMillis() - getLastMessageTime(ct));
		return floodProtectionTime <= 0 ? 0 : Math.max(1, (int) (floodProtectionTime / 1000));
	}

	public boolean isGagged() {
		return gagTime > 0 && System.currentTimeMillis() < gagTime;
	}

	public long getGagTime() {
		return this.gagTime;
	}

	public void setGagTime(long gagTime) {
		this.gagTime = gagTime;
	}

	@Override
	public String toString() {
		return "Player [name=" + name + ", id=" + clientId + ", race=" + race + "]";
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0