private void SendTurnAsync_Completed(Socket socket, SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success) logger.WriteWarning(String.Format(@"SendTurn Failed\r\nSocket Type {0}:\r\nError: {1}", socket.SocketType.ToString(), e.ToString())); }
/// <summary> /// 연결 수립시 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ClientAccepted(object sender, SocketAsyncEventArgs e) { // 클라이언트 소켓 얻기 logln("연결 요청 확인됨.", true); Socket clientSock = e.AcceptSocket; if (clientSock != null && clientSock is Socket) { // 소켓 데이터 설정 logln("대상: " + clientSock.RemoteEndPoint.ToString(), true); SocketAsyncEventArgs recvE = new SocketAsyncEventArgs(); // 소켓 데이터 초기화 SocketData data = new SocketData(); data.initData(1024); recvE.UserToken = data; recvE.SetBuffer(data.Data, 0, 1024); recvE.Completed += new EventHandler<SocketAsyncEventArgs>(ReceiveCompleted); clientSock.ReceiveAsync(recvE); // 뷰어 초기화 Viewer viewer = new Viewer(); viewer.Socket = clientSock; viewer.SocketData = data; Viewers.Add(viewer); } else { logln("연결을 수립하는 중 에러 발생\n" + e.ToString(), true, true); } // 다음 연결 수립 대기 Socket server = sender as Socket; e.AcceptSocket = null; server.AcceptAsync(e); }
/// <summary> /// Client connected. /// </summary> private void SocketAsyncEventArgs_Completed(object sender, SocketAsyncEventArgs e) { try { if (e.SocketError != SocketError.Success) {// This will execute the finally block, but skip the AssignAsyncAcceptArgs(). return; } if (e.LastOperation == SocketAsyncOperation.Accept && e.SocketError == SocketError.Success) { SocketCommunicatorEx helper = new SocketCommunicatorEx(_serializer); helper.AssignSocket(e.AcceptSocket, true); helper.Id = PendingClientId; #if Matrix_Diagnostics helper.Monitor.MinimumTracePriority = Monitor.MinimumTracePriority; #endif helper.ConnectedEvent += new SocketCommunicator.HelperUpdateDelegate(helper_ConnectedEvent); helper.DisconnectedEvent += new SocketCommunicator.HelperUpdateDelegate(helper_DisconnectedEvent); helper.MessageReceivedEvent += new SocketCommunicator.MessageUpdateDelegate(helper_MessageReceivedEvent); helper.SendAsyncCompleteEvent += new SocketCommunicator.AsyncMessageSendDelegate(helper_SendAsyncCompleteEvent); _clientsHotSwap[(int)helper.Id] = helper; #if Matrix_Diagnostics Monitor.ReportImportant("Client [" + helper.Id + "] connected."); #endif ServerClientUpdateDelegate delegateInstance = ClientConnectedEvent; if (delegateInstance != null) { delegateInstance(this, helper); } } else { #if Matrix_Diagnostics Monitor.NotImplementedWarning(e.ToString()); #endif } } finally { e.Completed -= new EventHandler<SocketAsyncEventArgs>(SocketAsyncEventArgs_Completed); e.Dispose(); } AssignAsyncAcceptArgs(); }