/// <summary> /// On Client Connect callback /// </summary> /// <param name="asyn"></param> private static void OnClientConnect(IAsyncResult asyn) { // Signal the main thread to continue. allDone.Set(); try { TcpClient clientSocket = default(TcpClient); clientSocket = _listener.EndAcceptTcpClient(asyn); ++counter; clientSocket.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); clientSocket.Client.NoDelay = true; int clientRemoteID = 0; clientRemoteID = counter; HandleClientRequest clientReq = new HandleClientRequest(clientSocket, clientRemoteID); clientReq.StartClient(); if (!Program.connectByClientId.ContainsKey(clientRemoteID)) { Console.WriteLine("Start: Join chat room"); Program.connectByClientId.TryAdd(clientRemoteID, clientReq); } WaitForClientConnect(); } catch { WaitForClientConnect(); } }
/// <summary> /// Send Msg To ClientId /// </summary> /// <param name="clientNumber"></param> /// <param name="msg"></param> public string SendMsgToClientId(int clientNumber, string msg, string receverEmailId) { StringBuilder traceLog = null; string receiverDetail = string.Empty; if (LinksMediaCorpChatServer.Program.connectByClientEmailId.ContainsKey(receverEmailId)) { clientNumber = LinksMediaCorpChatServer.Program.connectByClientEmailId[receverEmailId]; } if (Program.connectByClientId.ContainsKey(clientNumber) && !string.IsNullOrEmpty(msg)) { // Chat.Sockets.Socket tcpClient = null; try { traceLog = new StringBuilder(); traceLog.AppendLine("Start:SendMsgToClientId()" + receverEmailId); HandleClientRequest tcpClient = (HandleClientRequest)Program.connectByClientId[clientNumber]; if (tcpClient != null && tcpClient._clientSocket.Connected) { byte[] Ack = Encoding.ASCII.GetBytes(msg); tcpClient._networkStream.Write(Ack, 0, Ack.Length); tcpClient._networkStream.Flush(); Console.WriteLine("Message sent successfully"); receiverDetail = (string.IsNullOrEmpty(tcpClient.senderEmailId) ? "NA" : tcpClient.senderEmailId) + "#" + (string.IsNullOrEmpty(tcpClient.receiverEmailId) ? "NA" : tcpClient.receiverEmailId); } } catch (OutOfMemoryException e) { Console.WriteLine("Out of Memory: {0}", e.Message); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) { // socket buffer is probably full, wait and try again Thread.Sleep(30); } } catch { } finally { // Console.WriteLine("End:SendMsgToClientId-" + DateTime.Now.ToLongDateString()); LogManager.LogManagerInstance.WriteTraceLog(traceLog); traceLog = null; } } return(receiverDetail); }
/// <summary> /// Remove Client Chat User /// </summary> /// <param name="clientNumber"></param> /// <param name="emailId"></param> public void RemoveClientChatUser(int clientNumber, string emailId) { //create a StreamWriter Object StringBuilder traceLog = null; try { traceLog = new StringBuilder(); traceLog.AppendLine("Start:RemoveClientChatUser()" + clientNumber); if (clientNumber > 0) { HandleClientRequest tcpClient = Program.connectByClientId[clientNumber]; if (tcpClient != null) { if (LinksMediaCorpChatServer.Program.connectByClientId.ContainsKey(clientNumber)) { HandleClientRequest objHandleClientRequest; LinksMediaCorpChatServer.Program.connectByClientId.TryRemove(clientNumber, out objHandleClientRequest); } if (!string.IsNullOrEmpty(emailId) && LinksMediaCorpChatServer.Program.connectByClientEmailId.ContainsKey(emailId)) { int objHandleClientRequest = 0; LinksMediaCorpChatServer.Program.connectByClientEmailId.TryRemove(emailId, out objHandleClientRequest); } Console.WriteLine("Remove Client Chat User successfully"); } } } catch (OutOfMemoryException e) { traceLog.AppendLine("Out of Memory: {0}" + e.Message); } catch (Exception ex) { LogManager.LogManagerInstance.WriteErrorLog(ex); } finally { traceLog.AppendLine("End:RemoveClientChatUser()-" + DateTime.Now.ToLongDateString()); LogManager.LogManagerInstance.WriteTraceLog(traceLog); traceLog = null; } }