network.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2017 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "common/assert.h"
  5. #include "common/logging/log.h"
  6. #include "enet/enet.h"
  7. #include "network/network.h"
  8. namespace Network {
  9. static std::shared_ptr<RoomMember> g_room_member; ///< RoomMember (Client) for network games
  10. static std::shared_ptr<Room> g_room; ///< Room (Server) for network games
  11. // TODO(B3N30): Put these globals into a networking class
  12. bool Init() {
  13. if (enet_initialize() != 0) {
  14. LOG_ERROR(Network, "Error initalizing ENet");
  15. return false;
  16. }
  17. g_room = std::make_shared<Room>();
  18. g_room_member = std::make_shared<RoomMember>();
  19. LOG_DEBUG(Network, "initialized OK");
  20. return true;
  21. }
  22. std::weak_ptr<Room> GetRoom() {
  23. return g_room;
  24. }
  25. std::weak_ptr<RoomMember> GetRoomMember() {
  26. return g_room_member;
  27. }
  28. void Shutdown() {
  29. if (g_room_member) {
  30. if (g_room_member->IsConnected())
  31. g_room_member->Leave();
  32. g_room_member.reset();
  33. }
  34. if (g_room) {
  35. if (g_room->GetState() == Room::State::Open)
  36. g_room->Destroy();
  37. g_room.reset();
  38. }
  39. enet_deinitialize();
  40. LOG_DEBUG(Network, "shutdown OK");
  41. }
  42. } // namespace Network