/// <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); }
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(); } }
private void send_completed(object sender, SocketAsyncEventArgs args) { CUserToken token = args.UserToken as CUserToken; token.process_send(args); }