void handleMessage(AceStreamMessage message)
        {
            switch (message.Message)
            {
            case "HELLOTS":
                string key = message["key"];
                if (!string.IsNullOrEmpty(key))
                {
                    string responseKey = createResponseKey(message["key"]);
                    writeMessage("READY key=" + responseKey);
                }
                else
                {
                    writeMessage("READY");
                }
                break;

            case "READY":
            case "AUTH":
                isReady = true;
                engineReadyEvent.Set();
                if (OnConnected != null)
                {
                    OnConnected(this, new AceStreamEventArgs());
                }
                break;

            case "START":
                currentUrl = message[0];
                urlReadyEvent.Set();
                if (OnPlaybackReady != null)
                {
                    OnPlaybackReady(this, new AceStreamEventArgs(currentUrl));
                }
                break;

            case "PAUSE":
                if (OnPlaybackPause != null)
                {
                    OnPlaybackPause(this, new AceStreamEventArgs());
                }
                break;

            case "RESUME":
                if (OnPlaybackResume != null)
                {
                    OnPlaybackResume(this, new AceStreamEventArgs());
                }
                break;
            }
        }
        void socket_DidRead(AsyncSocket sender, byte[] data, long tag)
        {
            lock (clientLock)
            {
                if (isClosed)
                {
                    return;
                }

                string msg = Encoding.UTF8.GetString(data).Trim();
                log("Message received: {0}", msg);
                AceStreamMessage tsMessage = AceStreamMessage.Create(msg);
                sender.Read(AsyncSocket.CRLFData, -1, 0);
                handleMessage(tsMessage);
            }
        }
 void handleMessage(AceStreamMessage message)
 {
     switch (message.Message)
     {
         case "HELLOTS":
             string key = message["key"];
             if (!string.IsNullOrEmpty(key))
             {
                 string responseKey = createResponseKey(message["key"]);
                 writeMessage("READY key=" + responseKey);
             }
             else
             {
                 writeMessage("READY");
             }
             break;
         case "READY":
         case "AUTH":
             isReady = true;
             engineReadyEvent.Set();
             if (OnConnected != null)
                 OnConnected(this, new AceStreamEventArgs());
             break;
         case "START":
             currentUrl = message[0];
             urlReadyEvent.Set();
             if (OnPlaybackReady != null)
                 OnPlaybackReady(this, new AceStreamEventArgs(currentUrl));
             break;
         case "PAUSE":
             if (OnPlaybackPause != null)
                 OnPlaybackPause(this, new AceStreamEventArgs());
             break;
         case "RESUME":
             if (OnPlaybackResume != null)
                 OnPlaybackResume(this, new AceStreamEventArgs());
             break;
     }
 }