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