public override string ParseLine(string msg)
        {
            if (!string.IsNullOrEmpty(msg))
            {
                try
                {
                    Regex           rg      = new Regex(pattern, RegexOptions.Compiled);
                    MatchCollection matches = rg.Matches(msg);

                    if (matches.Count > 0)
                    {
                        string code = matches[0].Groups["code"].Value;

                        if (StreamConstants.NEW_MESSAGE.Equals(code))
                        {
                            return(matches[0].Groups["msg"].Value);
                        }
                        else if (StreamConstants.HEAT_BEAT.Equals(code))
                        {
                            msgListener.OnHeartBeat();
                        }
                        else if (StreamConstants.CONNECT_REACH_MAX_TIME.Equals(code))
                        {
                            msgListener.OnConnectReachMaxTime();
                            WakeUp(code);
                        }
                        else if (StreamConstants.DISCARD_MESSAGE.Equals(code))
                        {
                            msgListener.OnDiscardMsg(matches[0].Groups["msg"].Value.ToString());
                        }
                        else if (StreamConstants.SERVER_DEPLOY.Equals(code))
                        {
                            msgListener.OnServerUpgrade(matches[0].Groups["msg"].Value.ToString());
                            WakeUp(code);
                        }
                        else if (StreamConstants.SERVER_REHASH.Equals(code))
                        {
                            msgListener.OnServerRehash();
                            WakeUp(code);
                        }
                        else if (StreamConstants.CLIENT_KICKOFF.Equals(code))
                        {
                            msgListener.OnClientKickOff();
                            WakeUp(code);
                        }
                        else if (StreamConstants.SERVER_KICKOFF.Equals(code))
                        {
                            msgListener.OnServerKickOff();
                            WakeUp(code);
                        }
                        else if (StreamConstants.CONNECT_SUCCESS.Equals(code))
                        {
                            msgListener.OnConnectMsg(matches[0].Groups["msg"].Value);
                        }
                        else
                        {
                            msgListener.OnOtherMsg(matches[0].Groups["msg"].Value);
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.Error("Message is invalid:" + msg + e.Message);
                    msgListener.OnException(e);
                    return(null);
                }
            }
            return(null);
        }