Пример #1
0
        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);
        }
Пример #2
0
        /**
         * @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);
        }
Пример #3
0
        /**
         * @brief
         * ConnectModule을 추가하는 함수
         *
         * @details
         * ConoNetConfig를 받아 ConoConnectModule을 만든다.
         */
        public ConoConnectModule AddConnectModule(ConoNetConfig netConfig)
        {
            ConoConnectModule connectModule = new ConoConnectModule();

            connectModule.Init(netConfig);

            moduleDict.Add(connectModule.serverModule, connectModule);

            return(connectModule);
        }
Пример #4
0
        /**
         * @brief
         * 클래스 초기화 함수
         *
         * @details
         * ConoConnectModule을 받아 네트워크 연결 전 단계까지 해놓음.
         */
        public override bool Init(ConoConnectModule connectModule)
        {
            if (base.Init(connectModule) == false)
            {
                Console.WriteLine("init fail");
                return(false);
            }

            return(true);
        }
Пример #5
0
        /**
         * @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);
        }
Пример #6
0
        /**
         * @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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        /**
         * @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)
                }
            }
        }