mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2025-07-03 08:15:34 +00:00
- Change 'applist' action to 'list' to match the documentation
- Add 'quit' action to quit the app being streamed - Check if the device is paired before streaming - Fix a typo that caused a segfault when streaming
This commit is contained in:
parent
15e0048fca
commit
6be4ffef9f
@ -57,6 +57,7 @@ implementation.
|
||||
pair Pair device with computer
|
||||
stream Stream computer to device
|
||||
list List available games and applications
|
||||
quit Quit the application or game being streamed
|
||||
help Show this help
|
||||
|
||||
Streaming options:
|
||||
|
30
src/client.c
30
src/client.c
@ -20,6 +20,7 @@
|
||||
#include "http.h"
|
||||
#include "xml.h"
|
||||
#include "mkcert.h"
|
||||
#include "client.h"
|
||||
|
||||
#include "limelight-common/Limelight.h"
|
||||
|
||||
@ -217,6 +218,11 @@ cleanup:
|
||||
void client_pair(const char *address) {
|
||||
char url[4096];
|
||||
|
||||
if (client_is_paired(NULL)) {
|
||||
printf("Already paired\n");
|
||||
return;
|
||||
}
|
||||
|
||||
char pin[5];
|
||||
sprintf(pin, "%d%d%d%d", (int)random() % 10, (int)random() % 10, (int)random() % 10, (int)random() % 10);
|
||||
printf("Please enter the following PIN on the target PC: %s\n", pin);
|
||||
@ -302,6 +308,8 @@ void client_pair(const char *address) {
|
||||
sprintf(url, "https://%s:47984/pair?uniqueid=%s&devicename=roth&updateState=1&phrase=pairchallenge", address, unique_id, challenge_response_hex);
|
||||
http_request(url, data);
|
||||
http_free_data(data);
|
||||
|
||||
printf("Paired\n");
|
||||
}
|
||||
|
||||
struct app_list *client_applist(const char *address) {
|
||||
@ -345,6 +353,28 @@ void client_start_app(STREAM_CONFIGURATION *config, const char *address, int app
|
||||
http_free_data(data);
|
||||
}
|
||||
|
||||
void client_quit_app(const char *address) {
|
||||
char url[4096];
|
||||
struct http_data *data = http_create_data();
|
||||
sprintf(url, "https://%s:47984/cancel?uniqueid=%s", address, unique_id);
|
||||
http_request(url, data);
|
||||
http_free_data(data);
|
||||
}
|
||||
|
||||
bool client_is_paired(const char *address) {
|
||||
if (address != NULL)
|
||||
client_load_server_status(address);
|
||||
|
||||
return paired;
|
||||
}
|
||||
|
||||
int client_get_current_game(const char *address) {
|
||||
if (address != NULL)
|
||||
client_load_server_status(address);
|
||||
|
||||
return currentGame;
|
||||
}
|
||||
|
||||
void client_init(const char *address) {
|
||||
http_init();
|
||||
client_load_unique_id();
|
||||
|
@ -29,3 +29,6 @@ struct app_list* client_applist(const char* serverAddress);
|
||||
int client_get_app_id(const char* serverAddress, char* name);
|
||||
void client_pair(const char *address);
|
||||
int client_get_server_version(void);
|
||||
bool client_is_paired(const char *address);
|
||||
int client_get_current_game(const char *address);
|
||||
void client_quit_app(const char *address);
|
||||
|
25
src/main.c
25
src/main.c
@ -77,7 +77,7 @@ static void stream(STREAM_CONFIGURATION* config, const char* address, const char
|
||||
}
|
||||
|
||||
struct sockaddr_in *addr = (struct sockaddr_in*)res->ai_addr;
|
||||
LiStartConnection(addr->sin_addr.s_addr, config, &connection_callbacks, &decoder_callbacks,
|
||||
LiStartConnection(addr->sin_addr.s_addr, config, &connection_callbacks, decoder_callbacks,
|
||||
&audio_callbacks, &platform_callbacks, NULL, 0, client_get_server_version());
|
||||
freeaddrinfo(res);
|
||||
|
||||
@ -93,6 +93,7 @@ static void help() {
|
||||
printf("\tpair\t\t\tPair device with computer\n");
|
||||
printf("\tstream\t\t\tStream computer to device\n");
|
||||
printf("\tlist\t\t\tList available games and applications\n");
|
||||
printf("\tquit\t\t\tQuit the application or game being streamed\n");
|
||||
printf("\thelp\t\t\tShow this help\n\n");
|
||||
printf(" Streaming options\n\n");
|
||||
printf("\t-720\t\t\tUse 1280x720 resolution [default]\n");
|
||||
@ -149,6 +150,13 @@ char* get_path(char* name) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void pair_check(void) {
|
||||
if (!client_is_paired(NULL)) {
|
||||
printf("You must pair with the PC first\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
STREAM_CONFIGURATION config;
|
||||
config.width = 1280;
|
||||
@ -270,12 +278,17 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
client_init(address);
|
||||
|
||||
if (strcmp("applist", action) == 0)
|
||||
if (strcmp("list", action) == 0) {
|
||||
pair_check();
|
||||
applist(address);
|
||||
else if (strcmp("stream", action) == 0)
|
||||
} else if (strcmp("stream", action) == 0) {
|
||||
pair_check();
|
||||
stream(&config, address, app, sops, localaudio);
|
||||
else if (strcmp("pair", action) == 0)
|
||||
} else if (strcmp("pair", action) == 0)
|
||||
client_pair(address);
|
||||
else
|
||||
fprintf(stderr, "%s is not a valid actions\n", action);
|
||||
else if (strcmp("quit", action) == 0) {
|
||||
pair_check();
|
||||
client_quit_app(address);
|
||||
} else
|
||||
fprintf(stderr, "%s is not a valid action\n", action);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user