Thread thread; ///< DoListen()함수를 돌리기 위한 쓰레드 객체 /** * @brief * 클래스 초기화 함수 * * @details * ConoConnectModule을 받아 네트워크 연결 전 단계까지 해놓음. */ public override bool Init(ConoConnectModule connectModule) { if (base.Init(connectModule) == false) { Console.WriteLine("init fail"); return(false); } try { socket.Bind(endpoint); socket.Listen(100); socketAsyncEventArgs = new SocketAsyncEventArgs(); socketAsyncEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(AcceptCompleted); } catch (Exception e) { Console.WriteLine(e.Message); return(false); } return(true); }
/** * @brief * 받은 ConoConnectModule의 네트워크 작업을 시작함. * * @details * 네트워크 작업에 필요한 매개변수을 받아 세팅함. * * @param ConoNetConfig netConfig\n * 연결등록, 또는 연결요청할 정보를 매개변수로 전달해줘야 됨.\n * * @return bool * 성공시 true, 실패시 false 반환 */ public bool ProcessConnectModule(ConoConnectModule connectModule) { if (connectModule.serverRule == "server") { ConoClientConnector clientConnector = new ConoClientConnector(); if (clientConnector.Init(connectModule) == false) { return(false); } clientConnector.Connect(); } else if (connectModule.serverRule == "client") { ConoListener listener = new ConoListener(); if (listener.Init(connectModule) == false) { connectModule.networkHandler.Connect(null); return(false); } listener.Listen(); } else { return(false); } return(true); }
/** * @brief * ConnectModule을 추가하는 함수 * * @details * ConoNetConfig를 받아 ConoConnectModule을 만든다. */ public ConoConnectModule AddConnectModule(ConoNetConfig netConfig) { ConoConnectModule connectModule = new ConoConnectModule(); connectModule.Init(netConfig); moduleDict.Add(connectModule.serverModule, connectModule); return(connectModule); }
/** * @brief * 클래스 초기화 함수 * * @details * ConoConnectModule을 받아 네트워크 연결 전 단계까지 해놓음. */ public override bool Init(ConoConnectModule connectModule) { if (base.Init(connectModule) == false) { Console.WriteLine("init fail"); return(false); } return(true); }
/** * @brief * 멤버변수들을 값을 지정하는 함수 */ public bool Init(Socket socket, ConoConnectModule connectModule) { this.socket = socket; this.connectModule = connectModule; recvSocketAsyncEventArgs.SetBuffer(ConoNetwork.Instance.bufferPool.BringBuffer(), 0, ConoNetwork.Instance.bufferPool.bufferSize); sendSocketAsyncEventArgs.SetBuffer(ConoNetwork.Instance.bufferPool.BringBuffer(), 0, ConoNetwork.Instance.bufferPool.bufferSize); recvSocketAsyncEventArgs.UserToken = this; sendSocketAsyncEventArgs.UserToken = this; return(true); }
/** * @brief * 새로운 연결작업을 요청할 때 호출하는 함수 * * @details * 네트워크 작업에 필요한 매개변수을 받아 세팅함. * Run중이라면 바로 네트워크 연결작업을 시작함. * * @param ConoNetConfig netConfig\n * 연결등록, 또는 연결요청할 정보를 매개변수로 전달해줘야 됨.\n * * @return bool * 성공시 true, 실패시 false 반환 */ public bool AddNetConfig(ConoNetConfig netConfig) { ConoConnectModule connectModule = conoConnectModuleManager.AddConnectModule(netConfig); if (isRunning) { if (ProcessConnectModule(connectModule) == false) { return(false); } } return(true); }
internal IPEndPoint endpoint; ///< 걍 아이피 포트 등록할 때 쓰는 거임 /** * @brief * 클래스 초기화 함수 * * @details * ConoConnectModule을 받아 네트워크 연결 전 단계까지 해놓음.\n */ public virtual bool Init(ConoConnectModule connectModule) { this.connectModule = connectModule; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress address; if (connectModule.ip == "0.0.0.0") { address = IPAddress.Any; } else { address = IPAddress.Parse(connectModule.ip); } endpoint = new IPEndPoint(address, connectModule.port); return(true); }
/** * @brief * ConoNetwork를 시작하는 함수. * * @details * 세팅되어있는 네트워크 모듈들을 기반으로 연결등록, 연결요청을 시작함 * 한번만 호출해야 됨. */ public void Run() { lock (syncRoot) { if (isRunning == false) { isRunning = true; } else { return; } } foreach (KeyValuePair <string, ConoConnectModule> keyValuePair in conoConnectModuleManager.moduleDict) { ConoConnectModule connectModule = keyValuePair.Value; if (ProcessConnectModule(connectModule) == false) { //if false, remove connectModule and send false throught IConoNetworkHandler.Connect(null) } } }