mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-15 18:40:00 +00:00
Savestates/net: fix P2P socket data saving
This commit is contained in:
parent
c509226bab
commit
c7a94a80df
@ -20,7 +20,7 @@ lv2_socket_native::lv2_socket_native(lv2_socket_family family, lv2_socket_type t
|
||||
}
|
||||
|
||||
lv2_socket_native::lv2_socket_native(utils::serial& ar, lv2_socket_type type)
|
||||
: lv2_socket(ar, type)
|
||||
: lv2_socket(stx::make_exact(ar), type)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
ar(so_reuseaddr, so_reuseport);
|
||||
@ -37,7 +37,7 @@ lv2_socket_native::lv2_socket_native(utils::serial& ar, lv2_socket_type type)
|
||||
|
||||
void lv2_socket_native::save(utils::serial& ar)
|
||||
{
|
||||
static_cast<lv2_socket*>(this)->save(ar, true);
|
||||
lv2_socket::save(ar, true);
|
||||
#ifdef _WIN32
|
||||
ar(so_reuseaddr, so_reuseport);
|
||||
#else
|
||||
|
@ -12,30 +12,28 @@ lv2_socket_p2p::lv2_socket_p2p(lv2_socket_family family, lv2_socket_type type, l
|
||||
}
|
||||
|
||||
lv2_socket_p2p::lv2_socket_p2p(utils::serial& ar, lv2_socket_type type)
|
||||
: lv2_socket(ar, type)
|
||||
: lv2_socket(stx::make_exact(ar), type)
|
||||
{
|
||||
ar(port, vport, bound_addr);
|
||||
|
||||
std::deque<std::pair<sys_net_sockaddr_in_p2p, std::vector<u8>>> data_dequeue{ar};
|
||||
auto data_dequeue = ar.pop<std::deque<std::pair<sys_net_sockaddr_in_p2p, std::vector<u8>>>>();
|
||||
|
||||
for (; !data_dequeue.empty(); data_dequeue.pop_front())
|
||||
{
|
||||
data.push(data_dequeue.front());
|
||||
data.push(std::move(data_dequeue.front()));
|
||||
}
|
||||
|
||||
ar(data_dequeue);
|
||||
}
|
||||
|
||||
void lv2_socket_p2p::save(utils::serial& ar)
|
||||
{
|
||||
static_cast<lv2_socket*>(this)->save(ar, true);
|
||||
lv2_socket::save(ar, true);
|
||||
ar(port, vport, bound_addr);
|
||||
|
||||
std::deque<std::pair<sys_net_sockaddr_in_p2p, std::vector<u8>>> data_dequeue;
|
||||
|
||||
for (; !data.empty(); data.pop())
|
||||
for (auto save_data = ::as_rvalue(data); !save_data.empty(); save_data.pop())
|
||||
{
|
||||
data_dequeue.push_back(data.front());
|
||||
data_dequeue.push_back(std::move(save_data.front()));
|
||||
}
|
||||
|
||||
ar(data_dequeue);
|
||||
|
@ -10,13 +10,13 @@ lv2_socket_raw::lv2_socket_raw(lv2_socket_family family, lv2_socket_type type, l
|
||||
}
|
||||
|
||||
lv2_socket_raw::lv2_socket_raw(utils::serial& ar, lv2_socket_type type)
|
||||
: lv2_socket(ar, type)
|
||||
: lv2_socket(stx::make_exact(ar), type)
|
||||
{
|
||||
}
|
||||
|
||||
void lv2_socket_raw::save(utils::serial& ar)
|
||||
{
|
||||
static_cast<lv2_socket*>(this)->save(ar, true);
|
||||
lv2_socket::save(ar, true);
|
||||
}
|
||||
|
||||
std::tuple<bool, s32, std::shared_ptr<lv2_socket>, sys_net_sockaddr> lv2_socket_raw::accept([[maybe_unused]] bool is_lock)
|
||||
|
@ -1203,6 +1203,12 @@ namespace stx
|
||||
template <typename U> requires (std::is_same_v<U, T> && std::is_copy_constructible_v<T>)
|
||||
operator U() const noexcept { return obj; };
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
stx::exact_t<T&> make_exact(T&& obj) noexcept
|
||||
{
|
||||
return stx::exact_t<T&>(static_cast<T&>(obj));
|
||||
}
|
||||
}
|
||||
|
||||
// Read object of type T from raw pointer, array, string, vector, or any contiguous container
|
||||
|
Loading…
x
Reference in New Issue
Block a user