mirror of
https://github.com/onyx-and-iris/q3rcon-ps.git
synced 2026-02-21 00:59:11 +00:00
Compare commits
No commits in common. "main" and "v0.2.0" have entirely different histories.
@ -38,14 +38,16 @@ finally {
|
|||||||
|
|
||||||
## Rcon Class
|
## Rcon Class
|
||||||
|
|
||||||
#### `Send($cmd)`
|
#### `Send($cmd) | Send($cmd, $timeout)`
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$rcon.Send("mapname")
|
$rcon.Send("mapname")
|
||||||
|
|
||||||
$rcon.Send("g_gametype dm")
|
$rcon.Send("g_gametype dm")
|
||||||
|
|
||||||
$rcon.Send("map_rotate")
|
$rcon.Send("map_rotate", 2000)
|
||||||
```
|
```
|
||||||
|
|
||||||
If the command returns a response it will be printed to the console.
|
If the command returns a response it will be printed to the console.
|
||||||
|
|
||||||
|
Pass an optional timeout (ms) for commands that return responses in fragments. (status, map_rotate etc...)
|
||||||
|
|||||||
15
Taskfile.yml
15
Taskfile.yml
@ -1,15 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
bump:
|
|
||||||
desc: 'Bump the module version in the .psd1 file. Usage: "task bump -- show" or "task bump -- [patch|minor|major]".'
|
|
||||||
preconditions:
|
|
||||||
- sh: 'pwsh -c "if (Get-Command bump) { exit 0 } else { exit 1 }"'
|
|
||||||
msg: "The 'bump' command is not available. Please install the required tools to use this command."
|
|
||||||
cmds:
|
|
||||||
- |
|
|
||||||
{{if eq .CLI_ARGS "show"}}
|
|
||||||
pwsh -c "bump show -f lib/Q3Rcon.psd1 -p \"ModuleVersion\s*=\s'(\d+\.\d+\.\d+)'\""
|
|
||||||
{{else}}
|
|
||||||
pwsh -c "bump {{.CLI_ARGS}} -w -f lib/Q3Rcon.psd1 -p \"ModuleVersion\s*=\s'(\d+\.\d+\.\d+)'\""
|
|
||||||
{{end}}
|
|
||||||
@ -12,15 +12,20 @@ function Read-HostUntilEmpty {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
$resp = $rcon.Send($line)
|
if ($line -in @('fast_restart', 'map_rotate', 'map_restart')) {
|
||||||
Write-Host (Remove-ColourCodes $resp)
|
$cmd = $line -replace '(?:^|_)(\p{L})', { $_.Groups[1].Value.ToUpper() }
|
||||||
|
$rcon.$cmd()
|
||||||
|
}
|
||||||
|
elseif ($line.StartsWith('map mp_')) {
|
||||||
|
$mapname = $line.Split()[1]
|
||||||
|
$rcon.SetMap($mapname)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rcon.Send($line)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function Remove-ColourCodes($str) {
|
|
||||||
return $str -replace '\^[0-9]', ''
|
|
||||||
}
|
|
||||||
|
|
||||||
function Get-ConnFromPSD1 {
|
function Get-ConnFromPSD1 {
|
||||||
$configpath = Join-Path $PSScriptRoot 'config.psd1'
|
$configpath = Join-Path $PSScriptRoot 'config.psd1'
|
||||||
return Import-PowerShellDataFile -Path $configpath
|
return Import-PowerShellDataFile -Path $configpath
|
||||||
|
|||||||
@ -75,19 +75,27 @@ function Send-RconCommand() {
|
|||||||
param($rcon)
|
param($rcon)
|
||||||
|
|
||||||
$line = $OTB.Text
|
$line = $OTB.Text
|
||||||
Write-Debug "Sending command: $line"
|
$line | Write-Debug
|
||||||
$resp = $rcon.Send($line)
|
if ($line -in @('fast_restart', 'map_rotate', 'map_restart')) {
|
||||||
|
$RLbl.Text = ''
|
||||||
|
$cmd = $line -replace '(?:^|_)(\p{L})', { $_.Groups[1].Value.ToUpper() }
|
||||||
|
$rcon.$cmd()
|
||||||
|
}
|
||||||
|
elseif ($line.StartsWith('map mp_')) {
|
||||||
|
$RLbl.Text = ''
|
||||||
|
$mapname = $line.Split()[1]
|
||||||
|
$rcon.SetMap($mapname)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$resp = $rcon.Send($line)
|
||||||
|
}
|
||||||
|
|
||||||
if ($resp -match '^["](?<name>[a-z_]+)["]\sis[:]\s["](?<value>.*?)\^7["]\s') {
|
if ($resp -match '^["](?<name>[a-z_]+)["]\sis[:]\s["](?<value>.*?)\^7["]\s') {
|
||||||
$RLbl.Text = Remove-ColourCodes "$($Matches.name): $($Matches.value)"
|
$RLbl.Text = $Matches.name + ': ' + $Matches.value
|
||||||
}
|
}
|
||||||
$OTB.Text = ''
|
$OTB.Text = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
function Remove-ColourCodes($str) {
|
|
||||||
return $str -replace '\^[0-9]', ''
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function Get-ConnFromPSD1 {
|
function Get-ConnFromPSD1 {
|
||||||
$configpath = Join-Path $PSScriptRoot 'config.psd1'
|
$configpath = Join-Path $PSScriptRoot 'config.psd1'
|
||||||
|
|||||||
@ -16,7 +16,7 @@ function Send-Message {
|
|||||||
param($rcon)
|
param($rcon)
|
||||||
|
|
||||||
$msg = Get-DadJoke
|
$msg = Get-DadJoke
|
||||||
Write-Debug "Sending message: $msg"
|
$msg | Write-Debug
|
||||||
$rcon.Say($msg)
|
$rcon.Say($msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,7 +25,13 @@ try {
|
|||||||
$conn = Get-ConnFromPSD1
|
$conn = Get-ConnFromPSD1
|
||||||
$rcon = Connect-Rcon -hostname $conn.host -port $conn.port -passwd $conn.passwd
|
$rcon = Connect-Rcon -hostname $conn.host -port $conn.port -passwd $conn.passwd
|
||||||
|
|
||||||
Send-Message -rcon $rcon
|
$stopWatch = [system.diagnostics.stopwatch]::StartNew()
|
||||||
|
$timeSpan = New-TimeSpan -Seconds 30
|
||||||
|
do {
|
||||||
|
Send-Message -rcon $rcon
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
} until ($stopWatch.Elapsed -ge $timeSpan)
|
||||||
|
$stopWatch.Stop()
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
Disconnect-Rcon -rcon $rcon
|
Disconnect-Rcon -rcon $rcon
|
||||||
|
|||||||
@ -122,7 +122,7 @@ class Base {
|
|||||||
try {
|
try {
|
||||||
$bytesReceived = $this._socket.Receive($this._receiveBuffer)
|
$bytesReceived = $this._socket.Receive($this._receiveBuffer)
|
||||||
if ($bytesReceived -gt 0) {
|
if ($bytesReceived -gt 0) {
|
||||||
$dataStartIndex = [Math]::Min($headerLength - 1, $bytesReceived)
|
$dataStartIndex = [Math]::Min($headerLength, $bytesReceived)
|
||||||
$responseText = [System.Text.Encoding]::ASCII.GetString($this._receiveBuffer, $dataStartIndex, $bytesReceived - $dataStartIndex)
|
$responseText = [System.Text.Encoding]::ASCII.GetString($this._receiveBuffer, $dataStartIndex, $bytesReceived - $dataStartIndex)
|
||||||
$responseData.Append($responseText) | Out-Null
|
$responseData.Append($responseText) | Out-Null
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user