/// <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();
     }
 }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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;
            }
        }