1#ifndef YAZE_APP_EMU_MESEN_MESEN_SOCKET_CLIENT_H_
2#define YAZE_APP_EMU_MESEN_MESEN_SOCKET_CLIENT_H_
11#include <unordered_map>
14#include "absl/status/status.h"
15#include "absl/status/statusor.h"
159 absl::Status
Connect(
const std::string& socket_path);
193 absl::StatusOr<MesenState>
GetState();
198 absl::Status
Pause();
208 absl::Status
Reset();
213 absl::Status
Frame();
220 absl::Status
Step(
int count = 1,
const std::string& mode =
"into");
245 absl::StatusOr<uint8_t>
ReadByte(uint32_t addr);
250 absl::StatusOr<uint16_t>
ReadWord(uint32_t addr);
255 absl::StatusOr<std::vector<uint8_t>>
ReadBlock(uint32_t addr,
size_t len);
260 absl::Status
WriteByte(uint32_t addr, uint8_t value);
265 absl::Status
WriteWord(uint32_t addr, uint16_t value);
270 absl::Status
WriteBlock(uint32_t addr,
const std::vector<uint8_t>& data);
284 absl::StatusOr<std::string>
Disassemble(uint32_t addr,
int count = 10);
291 const std::string& condition =
"");
306 absl::StatusOr<std::string>
GetTrace(
int count = 20);
321 absl::StatusOr<std::vector<SpriteInfo>>
GetSprites(
bool all =
false);
356 absl::Status
Subscribe(
const std::vector<std::string>& events);
386 absl::StatusOr<std::string>
SendCommand(
const std::string& json);
397 absl::StatusOr<std::string>
ParseResponse(
const std::string& response);
403 const std::string& json,
404 bool update_connection_state);
Unix socket client for Mesen2-OoS fork.
std::mutex command_mutex_
absl::Status ClearBreakpoints()
Clear all breakpoints.
absl::Status WriteWord(uint32_t addr, uint16_t value)
Write a 16-bit word to memory.
absl::StatusOr< uint8_t > ReadByte(uint32_t addr)
Read a single byte from memory.
void RemoveEventListener(EventListenerId id)
Remove a previously added event listener.
absl::Status Step(int count=1, const std::string &mode="into")
Step N CPU instructions (default 1)
void EventLoop()
Event listening thread function.
void SetEventCallback(EventCallback callback)
Set callback for received events.
absl::Status Ping()
Ping Mesen2 to check connectivity.
absl::Status Resume()
Resume emulation.
absl::StatusOr< CpuState > GetCpuState()
Get CPU register state.
absl::StatusOr< std::string > Screenshot()
Take a screenshot.
absl::StatusOr< std::string > ParseResponse(const std::string &response)
Parse JSON response for success/error.
const std::string & GetSocketPath() const
Get the current socket path.
std::atomic< bool > connected_
absl::Status LoadState(int slot)
Load state from slot.
std::unordered_map< EventListenerId, EventCallback > event_listeners_
absl::StatusOr< uint16_t > ReadWord(uint32_t addr)
Read a 16-bit word from memory.
absl::StatusOr< int > AddBreakpoint(uint32_t addr, BreakpointType type, const std::string &condition="")
Add a breakpoint.
emu::input::ControllerState current_input_
MesenSocketClient(const MesenSocketClient &)=delete
static std::vector< std::string > ListAvailableSockets()
List available Mesen2 sockets on the system.
absl::Status SetButtons(const emu::input::ControllerState &state)
Set all buttons at once.
MesenSocketClient & operator=(const MesenSocketClient &)=delete
absl::StatusOr< std::string > GetTrace(int count=20)
Get execution trace log.
absl::StatusOr< GameState > GetGameState()
Get comprehensive ALTTP game state.
absl::Status SetButton(emu::input::SnesButton button, bool pressed)
Set controller button state.
absl::StatusOr< MesenState > GetState()
Get current emulation state.
EventCallback event_callback_
absl::Status Frame()
Run exactly one frame.
absl::Status SetCollisionOverlay(bool enable, const std::string &colmap="A")
Enable/disable collision overlay.
bool IsConnected() const
Check if connected to Mesen2.
absl::StatusOr< std::string > SendCommand(const std::string &json)
Send a raw JSON command and get raw response.
EventListenerId AddEventListener(EventCallback callback)
Add an event listener without replacing existing listeners.
absl::StatusOr< std::vector< SpriteInfo > > GetSprites(bool all=false)
Get active sprites.
std::thread event_thread_
absl::Status RemoveBreakpoint(int id)
Remove a breakpoint by ID.
EventListenerId next_event_listener_id_
absl::Status Unsubscribe()
Unsubscribe from events.
std::mutex event_callback_mutex_
absl::StatusOr< std::string > SendCommandOnSocket(int fd, const std::string &json, bool update_connection_state)
Send a command using a specific socket descriptor.
absl::Status Subscribe(const std::vector< std::string > &events)
Subscribe to events.
absl::StatusOr< std::string > Disassemble(uint32_t addr, int count=10)
Disassemble instructions at address.
std::string pending_event_payload_
absl::Status Pause()
Pause emulation.
absl::Status Reset()
Reset the console.
std::atomic< bool > event_thread_running_
absl::Status SaveState(int slot)
Save state to slot.
void Disconnect()
Disconnect from Mesen2.
static std::vector< std::string > FindSocketPaths()
Find available Mesen2 socket paths.
absl::Status WriteByte(uint32_t addr, uint8_t value)
Write a single byte to memory.
absl::StatusOr< std::vector< uint8_t > > ReadBlock(uint32_t addr, size_t len)
Read a block of bytes from memory.
absl::Status Connect()
Auto-discover and connect to first available Mesen2 socket.
absl::Status WriteBlock(uint32_t addr, const std::vector< uint8_t > &data)
Write a block of bytes to memory.
std::function< void(const MesenEvent &)> EventCallback
BreakpointType
Breakpoint types.
CPU register state from Mesen2.
ALTTP health/items state.
Complete ALTTP game state from GAMESTATE command.
Event from Mesen2 subscription.
Emulation state from Mesen2.
Sprite information from SPRITES command.