2014-02-26 52 views
1

這是一個Windows媒體播放器C#代碼我正在處理,它發送一個TCP WebSocket消息回客戶說,MP3音頻仍在播放。Websockets消息不被髮送

我正在使用axWindowsMediaPlayer1.StatusChange,並且StatusChange會相應地觸發該消息,但即使我可以從我的WMP C#應用程序中的客戶端接收消息。

我不明白爲什麼它不會發送var message_back = "Audio still Playing...";回到客戶端。

private void Form1_Load(object sender, EventArgs e) 
{ 
    lblMessage.Text = ""; 
    axWindowsMediaPlayer1.URL = @"C:\Audio\song1.MP3"; 
    axWindowsMediaPlayer1.Ctlcontrols.stop(); 

    this.axWindowsMediaPlayer1.StatusChange += new EventHandler(axWindowsMediaPlayer1_StatusChange); 

    this.axWindowsMediaPlayer1.StatusChange += new EventHandler(serverStartup); 
} 

public void axWindowsMediaPlayer1_StatusChange(object sender, EventArgs e) 
{ 
    if (axWindowsMediaPlayer1.status == "Finished") 
    { 
     lblMessage.Text = "CONTINUE PLAYING..."; 
     axWindowsMediaPlayer1.Ctlcontrols.play(); 
    } 
} 

public void serverStartup(object sender, EventArgs e) 
{ 
    FleckLog.Level = LogLevel.Debug; 
    var allSockets = new List<IWebSocketConnection>(); 
    var server = new WebSocketServer("ws://localhost:8181"); 

    server.Start(socket => 
    { 
     socket.OnOpen =() => 
     { 
      allSockets.Add(socket); 
     }; 

     socket.OnClose =() => 
     {      
      allSockets.Remove(socket); 
     }; 

     socket.OnMessage = message => 
     { 
      allSockets.ToList().ForEach(s => s.Send("Echo: " + message));  
     }; 
    }); 

    if (axWindowsMediaPlayer1.status == "Finished") 
    { 
     var message_back = "Audio still Playing..."; 
     foreach (var socket in allSockets.ToList()) 
     { 
      socket.Send(message_back); 
     } 

     // I tried using this line bellow, but it won't work either. 
     //allSockets.ToList().ForEach(s => s.Send("Echo: " + message_back)); 
    } 
} 
+0

我不明白:你的代碼表示,如果(成品)...發送(「仍在播放」)? – TonyWilk

+0

當axWindowsMediaPlayer1.status檢測到「Finished」狀態時,我需要向Websocket發送一條消息,在這個例子中,消息簡直就是「Audio still Playing ...」,但在最終的代碼中會有其他的東西,比如這個音頻完成播放...等。 – AJ152

+0

好的 - 但是,你的if(Finished)是否在你的serverStartup()中,是否應該在axWindowsMediaPlayer1_StatusChange()方法中? – TonyWilk

回答

1

我在這裏猜測不少,但是,假設你axWindowsMediaPlayer1_StatusChange被稱爲 - 添加您的郵件發件人在那裏:

// made this global for simplicity... 
static List<IWebSocketConnection> allSockets; 
allSockets = new List<IWebSocketConnection>(); 

public void axWindowsMediaPlayer1_StatusChange(object sender, EventArgs e) 
{ 
    if (axWindowsMediaPlayer1.status == "Finished") 
    { 
     // send message... 
     var message_back = "Starting again..."; 
     foreach (var socket in allSockets.ToList()) 
     { 
      socket.Send(message_back); 
     } 

     // I assume this restarts playback... 
     lblMessage.Text = "CONTINUE PLAYING..."; 
     axWindowsMediaPlayer1.Ctlcontrols.play(); 
    } 

} 
+0

我剛剛嘗試過,但首先,變量allSockets拋出異常 「無法找到類型或命名空間名稱'var'(您是否缺少使用指令或程序集引用?)「 所以然後我移動函數內的變量,但即使沒有錯誤,它不會發送消息」再次啓動...「:( – AJ152

+0

我的錯誤,'var'是局部變量,請參閱上面的編輯 – TonyWilk

+0

現在靜態變量說:錯誤\t 4'Application.Form1.allSockets'是一個'字段',但用於'類型' – AJ152