테스트

aion-server 4.8

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

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aionemu.chatserver.configs.main.LoggingConfig;
import com.aionemu.chatserver.model.ChannelType;
import com.aionemu.chatserver.model.ChatClient;
import com.aionemu.chatserver.model.Race;

/**
 * @author ATracer
 */
public class ChatChannels {

	private static final Logger log = LoggerFactory.getLogger(ChatChannels.class);
	private static final Map<Integer, Channel> channels = new ConcurrentHashMap<>();

	private static Channel addChannel(ChannelType ct, int gameServerId, Race race, String channelMeta) {
		Channel channel = switch (ct) {
			case REGION -> new RegionChannel(gameServerId, race, channelMeta);
			case TRADE -> new TradeChannel(gameServerId, race, channelMeta);
			case LFG -> new LfgChannel(gameServerId, race);
			case JOB -> new JobChannel(gameServerId, race, channelMeta);
			case LANG -> new LangChannel(gameServerId, race, channelMeta);
		};
		channels.put(channel.getChannelId(), channel);
		return channel;
	}

	/**
	 * @param channelId
	 *          the channelId of the requesting Channel
	 * @return Channel with this channelId or null if no channel with this id exists.
	 */
	public static Channel getChannelById(int channelId) {
		Channel channel = channels.get(channelId);
		if (channel == null && LoggingConfig.LOG_CHANNEL_INVALID)
			log.warn("No registered channel with id {}", channelId);
		return channel;
	}

	/**
	 * @param identifier
	 *          - the identifier of the requested channel, e.g. @trade_Housing_barrack1.0.AION.KOR
	 * @return Channel with this identifier or creates and returns a new channel if no channel with such identifier exists.<br>
	 *         Null if no channel with this identifier exists and a new channel was not created.
	 */
	public static Channel getOrCreate(ChatClient client, String identifier) {
		if (LoggingConfig.LOG_CHANNEL_REQUEST)
			log.info("{} requested channel: {}", client, identifier);

		String[] parts = identifier.split("\u0001"); // { @, trade_Housing_barrack, 1.0.AION.KOR }
		if (parts.length != 3)
			return null;

		String[] channelType = parts[1].split("_", 2); // { trade, Housing_barrack }
		String[] channelRestrictions = parts[2].split("\\."); // { 1, 0, AION, KOR }

		ChannelType ct = ChannelType.getByIdentifier(channelType[0]);
		String channelMeta = channelType[1];
		int gameServerId = Integer.parseInt(channelRestrictions[0]);
		Race race = Race.getById(Integer.parseInt(channelRestrictions[1]));
		if (client.getRace() != race && client.getAccessLevel() == 0) {
			log.warn("{} requested channel of race: {}", client, race);
			return null;
		}

		for (Channel channel : channels.values()) {
			if (channel.matches(ct, gameServerId, race, channelMeta))
				return channel;
		}
		Channel channel = addChannel(ct, gameServerId, race, channelMeta);
		if (channel instanceof JobChannel jobChannel && !jobChannel.hasAliases()) {
			log.warn("{} requested channel for unknown class: {}", client, channelMeta);
		}
		return channel;
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 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