MainServer 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using SuperSocket.SocketEngine;
using CSBaseLib;
//TODO 1. 주기적으로 접속한 세션이 패킷을 주고 받았는지 조사(좀비 클라이언트 검사)
namespace ChatServer
{
public class MainServer : AppServer<ClientSession, EFBinaryRequestInfo>
{
public static ChatServerOption ServerOption;
public static SuperSocket.SocketBase.Logging.ILog MainLogger;
SuperSocket.SocketBase.Config.IServerConfig m_Config;
PacketProcessor MainPacketProcessor = new PacketProcessor();
RoomManager RoomMgr = new RoomManager();
- 서버 옵션, 로그, 세팅 등 변수 생성
- PacketProcessor과 RoomManager 생성
- PacketProcessor : 수신한 패킷을 처리하고, 해당 패킷에 따라 적절한 작업을 수행
- RoomManager : 최대 방 갯수만큼 방을 쫙 다 만들고, 리스트로 들고있음
생성자
public MainServer()
: base(new DefaultReceiveFilterFactory<ReceiveFilter, EFBinaryRequestInfo>())
{
NewSessionConnected += new SessionHandler<ClientSession>(OnConnected);
SessionClosed += new SessionHandler<ClientSession, CloseReason>(OnClosed);
NewRequestReceived += new RequestHandler<ClientSession, EFBinaryRequestInfo>(OnPacketReceived);
}
InitConfig
public void InitConfig(ChatServerOption option)
{
ServerOption = option;
m_Config = new SuperSocket.SocketBase.Config.ServerConfig
{
Name = option.Name,
Ip = "Any",
Port = option.Port,
Mode = SocketMode.Tcp,
MaxConnectionNumber = option.MaxConnectionNumber,
MaxRequestLength = option.MaxRequestLength,
ReceiveBufferSize = option.ReceiveBufferSize,
SendBufferSize = option.SendBufferSize
};
}
CreateStartServer
public void CreateStartServer()
{
try
{
bool bResult = Setup(new SuperSocket.SocketBase.Config.RootConfig(), m_Config, logFactory: new NLogLogFactory());
if (bResult == false)
{
Console.WriteLine("[ERROR] 서버 네트워크 설정 실패 ㅠㅠ");
return;
}
else
{
MainLogger = base.Logger;
MainLogger.Info("서버 초기화 성공");
}
// 룸 매니저로 방들 만들고, 패킷프로세서로 패킷 받고, 패킷 처리하는 동작 실행
CreateComponent();
Start();
MainLogger.Info("서버 생성 성공");
}
catch (Exception ex)
{
Console.WriteLine($"[ERROR] 서버 생성 실패: {ex.ToString()}");
}
}
- Setup : SuperSocket에서 서버를 설정하는데 사용하는 메서드
- RootConfig : 서버의 루트 설정 → 서버의 기본적인 설정 지정 가능
- m_Config : 사용자 정의 설정 객체 → 서버의 추가적인 설정 지정 가능
- logFactory : 로그 팩토리 객체 → 서버에서 사용할 로그 시스템 설정
- Setup에서 서버를 설정하고, Start에서 소켓을 만들고 서버 실행
StopServer
public void StopServer()
{
Stop();
MainPacketProcessor.Destory();
}