You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求C#代码转PowerShell脚本帮助:WebSocketServer代码块转换

Converting Your C# WebSocket Server Code to PowerShell

Let's walk through converting that C# snippet to working PowerShell, focusing specifically on the server.Start() delegate logic since that's the most nuanced part. I'm assuming you're using the WebSocketSharp library here (since that's where the WebSocketServer class you're referencing comes from), and you've already loaded its DLL into memory (via Add-Type or similar).

Step-by-Step Breakdown

First, let's recap what your C# code does:

Creates a WebSocket server listening on ws://localhost:8181, then sets up event handlers for new connections: log when a socket opens/closes, and echo any received messages back to the client.

Here's the equivalent PowerShell code, with clear explanations tied to your original C#:

# 1. Instantiate the WebSocketServer (matches your C# `var server = new WebSocketServer(...)`)
$server = New-Object WebSocketSharp.WebSocketServer("ws://localhost:8181")

# 2. Define the callback for new connections (replaces the lambda in `server.Start(...)`)
# In PowerShell, script blocks (`{ ... }`) take the place of C# lambdas for delegates
$connectionHandler = {
    param($socket)  # This maps directly to the `socket` parameter in your C# lambda

    # Bind OnOpen event (matches `socket.OnOpen = () => Console.WriteLine("Open!")`)
    $socket.OnOpen = {
        Write-Host "Open!"
    }

    # Bind OnClose event (matches `socket.OnClose = () => Console.WriteLine("Close!")`)
    $socket.OnClose = {
        Write-Host "Close!"
    }

    # Bind OnMessage event (matches `socket.OnMessage = message => socket.Send(message)`)
    # Note: WebSocketSharp's OnMessage passes a MessageEventArgs object, so we access its Data property
    $socket.OnMessage = {
        param($sender, $e)
        $sender.Send($e.Data)  # $sender is the active socket, $e.Data holds the received message
    }
}

# 3. Start the server with our connection handler
$server.Start($connectionHandler)

# Optional: Keep the script running to maintain the server
Write-Host "WebSocket server running on ws://localhost:8181. Press Ctrl+C to stop."
try {
    while ($server.IsListening) {
        Start-Sleep -Seconds 1
    }
} finally {
    $server.Stop()
}

Key Differences to Note

  • Delegates → Script Blocks: PowerShell uses script blocks instead of C# lambdas. We explicitly define parameters for each block to match the expected delegate signatures.
  • Event Handler Parameters: The OnMessage event in WebSocketSharp passes two parameters (the socket sender and event args), so we include param($sender, $e) to access the message content correctly.
  • Console Output: We use Write-Host instead of Console.WriteLine—this is PowerShell's standard way to write directly to the console.

If you run into scope issues (e.g., variables outside the script block not being accessible), you can use the $using: prefix to reference them, but that's not needed for this simple use case.

内容的提问来源于stack exchange,提问作者Dhirajtech86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:08:24