2014-02-26 113 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