126 lines
3.9 KiB
C
126 lines
3.9 KiB
C
/**
|
|
* Copyright (c) 2026 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "error/error.h"
|
|
#include "network/networkplatform.h"
|
|
#ifndef networkPlatformInit
|
|
#error "networkPlatformInit must be defined"
|
|
#endif
|
|
#ifndef networkPlatformUpdate
|
|
#error "networkPlatformUpdate must be defined"
|
|
#endif
|
|
#ifndef networkPlatformDispose
|
|
#error "networkPlatformDispose must be defined"
|
|
#endif
|
|
#ifndef networkPlatformIsConnected
|
|
#error "networkPlatformIsConnected must be defined"
|
|
#endif
|
|
|
|
typedef enum {
|
|
NETWORK_STATE_DISCONNECTED,
|
|
NETWORK_STATE_CONNECTING,
|
|
NETWORK_STATE_CONNECTED,
|
|
NETWORK_STATE_DISCONNECTING,
|
|
} networkstate_t;
|
|
|
|
typedef struct {
|
|
networkplatform_t platform;
|
|
errorstate_t errorState;
|
|
networkstate_t state;
|
|
|
|
void (*onDisconnect)(errorret_t error, void *user);
|
|
void *disconnectUser;
|
|
} network_t;
|
|
|
|
extern network_t NETWORK;
|
|
|
|
/**
|
|
* Initializes the network system. This will NOT connect to the network.
|
|
*
|
|
* @return An error code indicating success or failure.
|
|
*/
|
|
errorret_t networkInit();
|
|
|
|
/**
|
|
* Updates the network manager, dispatching any completed async request
|
|
* callbacks on the main thread.
|
|
*
|
|
* @return An error code indicating success or failure.
|
|
*/
|
|
errorret_t networkUpdate();
|
|
|
|
/**
|
|
* Disposes of the network manager. This will NOT disconnect from the network.
|
|
*
|
|
* @return An error code indicating success or failure.
|
|
*/
|
|
errorret_t networkDispose();
|
|
|
|
/**
|
|
* Returns true if the system is connected to AN network, this doesn't mean that
|
|
* requests will succeed, doesn't mean there's internet, just that we could
|
|
* possibly make network requests. If this is false, this usually means
|
|
* something like;
|
|
* - A network cable is not connnected
|
|
* - No Wi-Fi Connection has been established
|
|
* - No IP Address has been assigned
|
|
*
|
|
* That kinda stuff.
|
|
*
|
|
* In future I will probably have REASONS for why it's not connected, for
|
|
* example;
|
|
* - On PSP you need to "request" network access
|
|
* - On GameCube, network settings need to be defined, including DHCP, etc.
|
|
* - On Windows, this may require additional permissions
|
|
*
|
|
* @return True if some network connection is detected.
|
|
*/
|
|
bool_t networkIsConnected();
|
|
|
|
/**
|
|
* See networkIsConnected for a bit more info, but this is for some
|
|
* platforms (mainly PSP) to request the system to start doing networking.
|
|
*
|
|
* You should only call this once and assume that it is "pending" until either
|
|
* onComplete or onFailed is invoked. If you call this twice it is undefined
|
|
* behavior.
|
|
*
|
|
* onDisconnect must be provided, and is called whenever the network is lost
|
|
* after a successful connection. This will NOT be called if disconnect is
|
|
* manually triggered, but WILL if an error occurs, or a network stack bug, etc.
|
|
*
|
|
* @param onConnected Callback to invoke when the network is connected.
|
|
* @param onFailed Callback to invoke if the network connection fails.
|
|
* @param onDisconnect Called after a successful connection, when disconnected.
|
|
* @param user User data to pass to the callbacks.
|
|
*/
|
|
void networkRequestConnection(
|
|
void (*onConnected)(void *user),
|
|
void (*onFailed)(errorret_t error, void *user),
|
|
void (*onDisconnect)(errorret_t error, void *user),
|
|
void *user
|
|
);
|
|
|
|
/**
|
|
* Requests the system to disconnect from the network. This is basically just
|
|
* for PSP, but I guess it could be used on other platforms in future if they
|
|
* have some kind of "network connection mode" that needs to be exited.
|
|
*
|
|
* You should only call this once and assume that it is "pending" until
|
|
* onComplete is invoked. If you call this twice it is undefined behavior.
|
|
*
|
|
* If it fails, you still get onComplete called, but may fail if you try to
|
|
* reconnect later unfortunately.
|
|
*
|
|
* @param onComplete Callback to invoke when the network is disconnected.
|
|
* @param user User data to pass to the callback.
|
|
*/
|
|
void networkRequestDisconnection(
|
|
void (*onComplete)(void *user),
|
|
void *user
|
|
); |