Example #1
0
        /// <summary>
        /// 클라이언트에서 서버와의 통신을 위한 풀 할당
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="token"></param>
        public void on_new_server_connected(Socket socket, CUserToken token)
        {
            // SocketAsyncEventArgsPool에서 빼오지 않고 그때 그때 할당해서 사용한다.
            // 풀은 서버에서 클라이언트와의 통신용으로만 쓰려고 만든것이기 때문이다.
            // 클라이언트 입장에서 서버와 통신을 할 때는 접속한 서버당 두개의 EventArgs만 있으면 되기 때문에 그냥 new해서 쓴다.
            // 서버간 연결에서도 마찬가지이다.
            // 풀링처리를 하려면 c->s로 가는 별도의 풀을 만들어서 써야 한다.
            SocketAsyncEventArgs receive_event_arg = new SocketAsyncEventArgs();

            receive_event_arg.Completed += new EventHandler <SocketAsyncEventArgs>(receive_completed);
            receive_event_arg.UserToken  = token;
            receive_event_arg.SetBuffer(new byte[1024], 0, 1024);

            SocketAsyncEventArgs send_event_arg = new SocketAsyncEventArgs();

            send_event_arg.Completed += new EventHandler <SocketAsyncEventArgs>(send_completed);
            send_event_arg.UserToken  = token;
            send_event_arg.SetBuffer(new byte[1024], 0, 1024);

            begin_receive(socket, receive_event_arg, send_event_arg);
        }
Example #2
0
        private void on_connect_completed(object sender, SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                CUserToken token = new CUserToken();

                // 데이터 수신 준비.
                this.network_service.on_new_server_connected(this.client, token);

                if (this.connected_callback != null)
                {
                    this.connected_callback(token);
                }
            }
            else
            {
                // 실패
                //Console.WriteLine($"Failed to connect. {e.SocketError}");
                this.reconnection_callback();
            }
        }
Example #3
0
        private void send_completed(object sender, SocketAsyncEventArgs args)
        {
            CUserToken token = args.UserToken as CUserToken;

            token.process_send(args);
        }