Proto commits in DCS-gRPC/rust-server

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:9bb12cf
Author:mobot-gh
Committer:GitHub

Api compatibility improvements (#299) * Add various fixes related to DCS api changes * adjustments for linter * Return id_ for weapon objects and unknown objects * add entry for CHANGELOG.md

The documentation is generated from this commit.

Commit:50fbc39
Author:Zach Shepard
Committer:GitHub

Add Unit.GetSensors RPC and sensor typing (#288) * Add Unit.GetSensors RPC and sensor typing Introduce UnitService.GetSensors to expose DCS Unit:getSensors() with typed outputs for radar, IRST, RWR, and optical sensors. - Add proto messages: SensorCategory, Sensor, RadarSensor, IrstSensor, RwrSensor, OpticalSensor, DetectionDistanceAir, Hemisphere - Implement GRPC.methods.getSensors in Lua - Wire UnitService::get_sensors in Rust - Classify sensors by type id (0=optical, 1=radar, 2=irst, 3=rwr); * fix: lint issue with protolint on RwrSensor and OpticalSensor NewLine

Commit:985cf53
Author:mobot-gh
Committer:GitHub

Add coalition, toAll and playerName to sendchat event (#298)

Commit:619a719
Author:Zachary Maynard
Committer:GitHub

Add world.searchObjects RPC with volume support (#287) * Add world.searchObjects RPC with volume support Expose DCS’ world.searchObjects via WorldService/SearchObjects with full volume support (sphere, box, segment, pyramid). - Proto: define SearchObjectsRequest with SearchVolume (sphere/box/ segment/pyramid) using InputPosition for geo points; response returns dcs.common.v0.Target[] to reuse the existing union object type - Lua: implement GRPC.methods.searchObjects; build DCS volume tables (world.VolumeType.*) and flattened shapes; return objects wrapped in Target oneof - Rust: wire WorldService::search_objects to Lua method

Commit:1845eea
Author:Markus Ast

Add Parler based TTS (POC)

Commit:a4833d0
Author:Dutchie
Committer:GitHub

Added RunwayTouch and RunwayTakeoff for more accurate TakeOff and Land events (#272) Co-authored-by: dutchie032 <dutchie032>

Commit:64d5dc3
Author:Dutchie
Committer:GitHub

Added MetadataService with GetHealth and GetVersion (#267) Added an additional service. "MetadataService" for admin functionality that does not touch DCS itself. GetHealth => for getting the gRPC server status GetVersion => for getting the version of the cargo package. Nothing too fancy, but can be handy for the client and verification. Co-authored-by: dutchie032 <dutchie032>

Commit:610edcf
Author:Dutchie
Committer:GitHub

Feature/get draw argument value (#264) Added `unit:getDrawArgumentValue(name)` to the rust-server. This is handy for checking things on units like: - doors open/close - flaps - hook for carrier aircraft and more Tested with F-14 on the deck with hook down (cannot go down 100% due to it touching the ground):

Commit:91e5d06
Author:Markus Ast
Committer:Markus Ast

Add Piper as TTS provider

Commit:e91b906
Author:Markus Ast
Committer:GitHub

Add events and methods to track SRS clients (#230)

Commit:7774f12
Author:Jeffrey Jones
Committer:GitHub

Merge branch 'main' into orbit

Commit:6c608a4
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add Orbit and Racetrack commands.

Commit:c0e33ad
Author:Sören Meier
Committer:GitHub

add ActivateGroup, DestroyGroup, DestroyUnit (#214)

Commit:7fe8d4c
Author:Markus Ast
Committer:GitHub

Add `GRPC.tts(...)` Lua API (#202) * Add GRPC.tts(...) Lua API * Use InputPosition for positions in requests * Add note about InputPosition to changelog

Commit:efe9f37
Author:Markus Ast
Committer:GitHub

Implement TTS service (#194) * Implement TTS service * Move TTS provider settings into config file * Increase max line length of proto files to 100 characters * Use protolint default rules only * Add speak duration to TTS response * Rename wait to async in TransmitRequest * Add optional plain text to TTS request * Disable Windows TTS on any non-Windows OS * Document TTS config options in README * Move SRS address from TTS request into config file * Fix code formatting * Fix build on Linux * Rename text_ssml/text_plain to ssml/plaintext * Add doc comment to Transmit RPC method * Rename TTS request name field to srs_client_name * Add srs_client_name to TTS event * Add changelog entry

Commit:4912b66
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `GetBallisticsCount` API. Add an API that allows us to get a count of all ballistics objects.

Commit:ea9c16d
Author:Markus Ast
Committer:GitHub

Add time to units stream (#191) Resolves #165

Commit:78244b5
Author:Zach Shepard
Committer:GitHub

Add Transform to Weapon Export (#190) * Weapon export now includes speed and heading Changed object.lua to export speed and heading for weapon. Added heading and speed fields to Weapon proto message. * Add Transform to Weapon Object Export - Removed speed and heading from weapon export - Added transform to export - Added necessary WeaponIntermediate struct and implementation to unwrap transform * Update CHANGELOG.md * Update CHANGELOG.md

Commit:f1bb379
Author:Sören Meier
Committer:Jeffrey Jones

Scenery object have an integer as name, rename `name` to `id` and change the type to uint When listening to Dead events, no events where triggered for scenery objects. After looking at the logs I found out that the deserialization failed because the scenery struct expected a string but a number was given.

Commit:26fb19b
Author:Nick 'MorpheusXAUT' Müller
Committer:Jeffrey Jones

Add GetRealTime API

Commit:a0c13f7
Author:Markus Ast
Committer:GitHub

Add detailed position/attitude information to unit (#162) * Add detailed position/attitude information to unit * Allow `large_enum_variant` in dcs-grpc-stubs

Commit:614681e
Author:YoloWingPixie
Committer:Jeffrey Jones

Add getDetectedTargets method to controller Created GRPD.methods.getDetectedTarrgets which returns position, velocity, unit name, id, and optionally descriptors. Created exporter for detectedTarget. Added GetDetectedTargets rpc call to the controller service. Added GetDetectedTargetsRequest and Response message. controller proto now imports common proto. Defined common Contact proto message

Commit:0aa7a9d
Author:YoloWingPixie
Committer:Jeffrey Jones

Fixed protolint issues Updated 'descriptor' to 'descriptors' and adjusted line length of the service declaration to fit style guide.

Commit:3877f89
Author:YoloWingPixie
Committer:Jeffrey Jones

Changed getDetectedTargets to optionally return unit or weapon object - Removed unused detectedTargets exporter - Added support for getDetectedTargets to handle weapon objects -Updated Common proto and Controller proto to accomodate new option 'includeObject' and return for objects.

Commit:dc944c1
Author:YoloWingPixie
Committer:Jeffrey Jones

Changed additional return to a oneof field Based on review recommendation, changed weapon / unit / basic information to be returned in a oneof field.

Commit:bf94865
Author:YoloWingPixie
Committer:Jeffrey Jones

Rogue white space removal and updated changelog Fixed whitespace in common.proto.

Commit:945bf98
Author:YoloWingPixie
Committer:Jeffrey Jones

Add detectionType param to getDetectedTargets - Added detectionType param to the GetDetectedTargetsRequest message. int values match detection values for DCS API. - Added if else statement to utilize detectionType - Changed basicInformation return type to just use the unknown object exporter.

Commit:96ac446
Author:Jeffrey Jones
Committer:Jeffrey Jones

Return the full parent group with the unit When returning a unit object we will return the full group as its own object instead of embedding some group attributes in the unit object. This makes it easier for clients to parse streaming events without having to make separate calls to get group information or require them to keep a local copy in state that then needs to be managed.

Commit:9828452
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `GetAvailableSlots` API

Commit:c9a73b4
Author:Vladimir Ivanov
Committer:Jeffrey Jones

Add GetSessionId API

Commit:2554ae5
Author:Markus Ast
Committer:Jeffrey Jones

Add SimulationFps event Calculate FPS by hooking into `onSimulationFrame` and fire an event every second containing the average FPS since the last event (~1s). Resolves #164

Commit:511af4b
Author:Markus Ast
Committer:Jeffrey Jones

Update MarkPanel initiator to be optional This is necessary as the initiator is not always defined. It is not defined when: - The player who created the mark panel isn't currently occupying any unit (e.g. when they left the server or moved to spectator) - The mark panel was created by a game master / jtac / or similar non- unit roles

Commit:b4d095b
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add Mission Management APIs Add mission management APIs that allow clients to load and restart missions. The `LoadNextMission` API is apparently supposed to return false when the last mission in the mission list has been reached but DCS is returning true all the time. The APi to reload the current mission is not natively provided by DCS but is simple to implement and will be useful for admins I think.

Commit:0705cdb
Author:Jeffrey Jones
Committer:Jeffrey Jones

Make Hit/Kill event weaponName field optional Not all hit and kill events include a `weaponName` depending on what happened (For example one aircraft hitting another without the use of an intermediate weapon). This was causing many deserialization errors in the production logs of servers. Therefore we will make this field optional. I think that longterm we can come up with a better solution by removing the `weaponName` field entirely and only ever populating the `Weapon` field instead in lua. However this is a short-term fix for the next release.

Commit:5b8a345
Author:Justin Lovell
Committer:Jeffrey Jones

Get Static Objects API Retrieves all the statics populated to a coalition (or all!)

Commit:8eff1b8
Author:Nick Müller
Committer:Jeffrey Jones

Add `GetUnitType` API

Commit:f77c6ed
Author:Justin Lovell
Committer:GitHub

Add Static Objects API (`AddStaticObject` and `AddLinkedStatic`) (#144) Implementation of `addStaticObject` via the gRPC interface. Two API's were added as the behavior is slightly different that it did not need to justify an overloaded/oneof complex body. The cargo type is free text so to avoid the requirements of DCS-gRPC installations and clients to be coupled to any DCS updates / new units / renames * Static positioning * Linked unit * Cargo handling

Commit:62cb253
Author:Jeffrey Jones
Committer:GitHub

Add `GetTheatre` API (#142) Returns the theatre (map name) as a string. I chose to do it this way instead of an enum because it was simpler and would mean we don't need to update it when new maps come out.

Commit:55ffb48
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `MarkupToAll` and `MarkupToCoalition` APIs Although there is no `MarkupToCoalition` in the scripting environment; we will add a gRPC level API for one to keep in line with the `MarkTo*` APIs. There is no way to do a `MarkupToGroup` so we are not implementing it.

Commit:5e6f114
Author:Jeffrey Jones

Add `OutTextForUnit` API

Commit:1b36ba1
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `KickPlayer` API

Commit:b60cf86
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `GetMissionFilename` API

Commit:444f58d
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `IsServer` and `IsMultiplayer` APIs

Commit:55e07fc
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add pause APIs Add the APIs that allow us to get and set the paused status of a server

Commit:5afd243
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `GetMissionDescription` API

Commit:90c9293
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add ban related APIs Add ban related APIs. To get the ID to ban a player we use the `GetPlayers` API in the net service. Although these ban APIs are `net` APIs they are not available in the MSE, only the Hook environment, hence their being placed in the corresponding namespace.

Commit:0d6109d
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add `ExitProcess` API

Commit:804da16
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add more detail to `GroupCommand` event. Replace `groupName` field in the `GroupCommand` event with all the group details as exposed by the group exporter (currently id, name, coalition and category). This change was made based on experience writing a client that processes these events where only having the groupName was a limitation. This change breaks backwards compatibility with version 0.4.0 where the `GroupCommand` event was first added.

Commit:c8dc74f
Author:Andrei Zbikowski
Committer:Jeffrey Jones

Add MissionCommand API support Add support for the `AddMissionCommand`, `AddMissionCommandSubMenu` and `RemoveMissionCommandItem` APIs along with their Coalition and Group variants which allow us to create F10 radio command menu entries and have them emit events to DCS-gRPC clients. Additionally it adds new CommandEvents which are triggered for any execution of a command via the F10 radio menu by the players.

Commit:d15f3d2
Author:Jeffrey Jones
Committer:Jeffrey Jones

Fill out static object fields in event stream Fill out some of the static objects fields for use in the event stream.

Commit:b116d56
Author:Jeffrey Jones
Committer:Jeffrey Jones

Fill out scenery object fields in event stream Fill out some of the scenery objects fields for use in the event stream.

Commit:650baa6
Author:andrei
Committer:Jeffrey Jones

chore: add support for go bindings This commit implements support for generating official Go bindings by adding the `go_package` option to all proto sources.

Commit:f4028f2
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add C# headers Add headers to the proto files that specify the namespace the generated C# files will live under. This is part of work to create a simple C# nuget package so clients to not have to re-invent the wheel in their own appications. There are already `Dcs.*` nuget packages so to avoid confusion and conflict I am putting these under `RurouniJones` as a unique namespace since we don't have a company or any name that is particularly unique and I will be publishing other C# DCS related packages so it is as good a place as any.

Commit:e63bb9b
Author:Justin Lovell
Committer:Jeffrey Jones

Rename Coalition GetPlayers to GetPlayerUnits This would align to the lua function registration

Commit:a0937a7
Author:Justin Lovell
Committer:Jeffrey Jones

Linting `proto` files to conform to rules * Reformatted comment lines to wrap at char 80 * New lines on empty message bodies * Wrapping long RPC declarations when exceeding 80-chars

Commit:a5a5d36
Author:Justin Lovell
Committer:Jeffrey Jones

Fixing `GroupCategory` Motivated by work in progress with PR #111. Communicating breaking changes and configuring to change log and updating behavior

Commit:30aaf2b
Author:Justin Lovell
Committer:Jeffrey Jones

Specify unit category in `StreamUnits` Primary motivation is to ensure consistency with the underlying `GetGroups` implementation. Additional benefit is that different polling rates may be specified to the different categories. This makes sense because jets fly faster than ground units!

Commit:877e8f9
Author:Justin Lovell
Committer:Jeffrey Jones

Linting: implemented suggestions for Coalition Primary motivation to be a commit is due to CHANGELOG.md update and for a discussion on the API itself being affected. Lint to disable the default SUFFIX to be "INVALID" nor "UNSPECIFICIED" on `SKILL_RANDOM` and `POINT_TYPE_RANDOM` because the mission designer experiences this as the default impelementation

Commit:57e9f7c
Author:Justin Lovell
Committer:Jeffrey Jones

Emit when a player changes to a slot The DCS Control API should emit a special event to the gRPC clients that a player has changed a slot.

Commit:729cf9b
Author:Justin Lovell
Committer:Jeffrey Jones

Force Player Slot Selection Implementation of the `force_player_slot` function. There is only community knowledge on how this function operates; it is officially listed but not publicly documented.

Commit:dbcd62a
Author:Justin Lovell
Committer:Jeffrey Jones

Correction to snake casing `remote_address` Not sure why the linter never caught the camel casing. My sincere apologies for overlooking this typo.

Commit:327f210
Author:Justin Lovell
Committer:Jeffrey Jones

Correction to snake casing `remote_address` Not sure why the linter never caught the camel casing. My sincere apologies for overlooking this typo.

Commit:c437fb4
Author:Justin Lovell
Committer:Jeffrey Jones

GetPlayers returns all connected player attributes Getting the player info based on the players connected to the server. This is a combined loop of `net.get_player_list` and `net.get_player_info`. Notes about the player information which differs from official documentation. - locale is an undocumented attribute / would serve well for multilingual cases - ipAddr is actually `{address}:{port}` It was decided to perform the compound variation of the API. In theory, it should work effectively but needs to be verified by densely populated servers.

Commit:c7823c1
Author:Justin Lovell
Committer:Jeffrey Jones

SendChat and SendChatTo Initial implementation of the `net.*` namespace with the: - `send_chat_to` - `send_chat` `send_chat_to` does not implement the DCS API parameter of `fromPlayerId` due to the social impact of a player being emulated is more severe than a breached system and hence why the parameter has been redacted. If there is a valid use case, please do feel free to present your use case and why alternatives do not meet the user requirements. See PR #94 Added `net` as global read for lua linter

Commit:15ac47d
Author:Justin Lovell
Committer:GitHub

Include chat messages in event stream. Include chat messages in the event stream Observers of the simulation events and the chat messages (and other server side events) would be difficult to synchronize the chronological order unless the process creates a Rx stream which would require latency to be introduced to synchronize the events. Therefore include Chat messages in the main event stream

Commit:a7260f7
Author:Markus Ast
Committer:Markus Ast

start custom events at field number 8192 This gives plenty of space in the enum for built-in events.

Commit:4badbf4
Author:Markus Ast
Committer:Markus Ast

add DISCONNECT_REASON_UNSPECIFIED variant

Commit:8835f60
Author:Markus Ast
Committer:Markus Ast

add connect and disconnect events

Commit:3974911
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add Custom APIs Add some more custom APIs for aborting missions and getting their statuses.

Commit:f7e776e
Author:Markus Ast

add place to landingQualityMark event

Commit:b7a9981
Author:Jeffrey Jones

Format the protos format the protos using clang-format

Commit:0a91865
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add initial `AddGroup` implementation So far this implementation will create a ground group with a number of ground units and return null in the gRPC response for some reason. Many options are still hardcoded but what is currently implemented is enough to spawn a static SAM site such as a NASAM site and have it act as expected.

Commit:71a4d0d
Author:Markus Ast
Committer:Markus Ast

add category to common.v0.Unit

Commit:bad67ee
Author:Markus Ast
Committer:Jeffrey Jones

add GetTransform method to UnitService

Commit:c030939
Author:Jeffrey Jones

Version namespace the proto files Version namespace the proto files

Commit:685f996
Author:Markus Ast

remove velocity vector from wind related responses

Commit:07d755b
Author:Markus Ast
Committer:Markus Ast

add wind vector and move wind calculation to Rust

Commit:921247a
Author:Jeffrey Jones
Committer:Jeffrey Jones

Add AIRBASE_CATEGORY_UNSPECIFIED Add AIRBASE_CATEGORY_UNSPECIFIED to the AirbaseCategory enum to bring it into line with recommendations on not having a semantic meaning to 0 index gRPC enums unless you specifically want to.

Commit:98fdd9b
Author:Jeffrey Jones
Committer:Jeffrey Jones

Order Coalition package members alphabetically Makes it easier to scan through

Commit:662e99d
Author:Jeffrey Jones
Committer:Jeffrey Jones

Update coalition enum Update the coalition enum to add COALITION_ALL. We can actually use this new value in some APIs where specifying the coalition was optional.

Commit:ff743ae
Author:Jeffrey Jones
Committer:Jeffrey Jones

Make protolint happy Because doing so now may grant me brownie points when the robot uprising occurs. The only warnings left are for the Enums which I am also working on in the hope that it will spare me working in the silicon foundries.

Commit:09dd819
Author:Jeffrey Jones

Fix typo in field name

Commit:99e9175
Author:Jeffrey Jones
Committer:Jeffrey Jones

Increment Alarm State enum Increment the signal flare enum since gRPC does not recommend using zero indexed enums.

Commit:2f1baa7
Author:Jeffrey Jones
Committer:Jeffrey Jones

Increment Signal Flare enum Increment the signal flare enum since gRPC does not recommend using zero indexed enums. Fix smoke color to include validation while we are here.

Commit:68893ff
Author:Jeffrey Jones
Committer:Jeffrey Jones

Proof of Concept for Enum renumbering gRPC does not recommend zero indexed Enums but DCS uses them a lot. Therefore this commit is a proof-of-concept for the easiest workaround I can think of. Pros: Simple. Cons: all lua using these enums will have to remember to -1 when the DCS enum is zero indexed (which is not all of them).

Commit:296a803
Author:Jeffrey Jones
Committer:Markus Ast

Follow linting advice Eat crow and fix the things I thought I was being smart about and instead follow the recommendations of soulless linting programs. We are not following the suggestions for versioning the APIs at the end yet since are are still pre-stable. We will fix the enum warnings regarding the usage of `0` in a future commit Files formatted using clang-format

Commit:a0476b2
Author:Markus Ast
Committer:Markus Ast

use cached start time for mag declination

Commit:6da5d26
Author:Markus Ast
Committer:Markus Ast

add custom.GetMagneticDeclination method

Commit:ea5e54b
Author:Jeffrey Jones
Committer:Jeffrey Jones

Create a Common package. Create a common package and have all objects into it. This will be the lowest common denominator file that is depended on by others but has no dependencies.

Commit:6a1856b
Author:Jeffrey Jones

Add API for getting coalition main reference point Add API for tetting the main reference point for a coaltion (aka the Bullseye).

Commit:63681b6
Author:Markus Ast

use consistent spaces indentation in proto files As defined in Google's proto style guide: https://developers.google.com/protocol-buffers/docs/style

Commit:6b372e4
Author:Markus Ast
Committer:Markus Ast

add coalition and category to groups

Commit:741f9ef
Author:Markus Ast

add time offset to all positions When the position is used to track a unit over time it is important to correlate the position with a time. Since each request is async, the client can neither use the start or end of the request as a reference for the position. It is thus necessary to include a time reference for all positions.

Commit:3677e46
Author:Markus Ast

add unit.GetUnit method

Commit:3ef550d
Author:Markus Ast
Committer:Jeffrey Jones

implement mission.GetMissionStartTime method

Commit:6477f2d
Author:Markus Ast
Committer:Jeffrey Jones

rename GetMissionStartTime to GetScenarioStartTime

Commit:67f07a2
Author:Markus Ast
Committer:Jeffrey Jones

add date fields to getTimeZero

Commit:b8730a2
Author:Markus Ast
Committer:Jeffrey Jones

add mission.GetScenarioCurrentTime

Commit:9489357
Author:Markus Ast
Committer:Markus Ast

split hook APIs into separate grpc package

Commit:59a3a77
Author:Markus Ast

split mission APIs into separate grpc package