コード例 #1
0
ファイル: TurnServer.cs プロジェクト: vf1/turnserver
 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()));
 }
コード例 #2
0
ファイル: TcpIPServer.cs プロジェクト: Honsal/ChatServer
        /// <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);
        }
コード例 #3
0
        /// <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();
        }