void helper_DisconnectedEvent(SocketCommunicator client) { //Monitor.ReportImportant("Client [" + client.Id + "] disconnected."); ServerClientUpdateDelegate delegateInstance = ClientDisconnectedEvent; if (delegateInstance != null) { delegateInstance(this, client as SocketCommunicatorEx); } }
/// <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(); }