Skip to content

Commit

Permalink
Use TurboModules for networking in MSRN (#11867)
Browse files Browse the repository at this point in the history
* Update packages.json

* Define GetHttpTurboModuleName

* Update packages.json

* Define GetHttpModuleProvider

* Define other netwk modules provider methods

* Register networking turbomodules

* Change files

* clang format

* Uncomment MSRN forward declarations

* Remove cntPtr.h include

* Remove CoreNativeModules

* Revert packages.lock.json
  • Loading branch information
JunielKatarn committed Jul 12, 2023
1 parent d8c42f3 commit 41e884a
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 99 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Use TurboModules for networking in MSRN",
"packageName": "react-native-windows",
"email": "julio.rocha@microsoft.com",
"dependentChangeType": "patch"
}
44 changes: 0 additions & 44 deletions vnext/Microsoft.ReactNative/Base/CoreNativeModules.cpp

This file was deleted.

30 changes: 0 additions & 30 deletions vnext/Microsoft.ReactNative/Base/CoreNativeModules.h

This file was deleted.

4 changes: 1 addition & 3 deletions vnext/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@
<ItemGroup>
<ClInclude Include="ABICxxModule.h" />
<ClInclude Include="ABIViewManager.h" />
<ClInclude Include="Base\CoreNativeModules.h" />
<ClInclude Include="Base\CxxReactIncludes.h" />
<ClInclude Include="Base\FollyIncludes.h" />
<ClInclude Include="CoreAppPage.h">
Expand Down Expand Up @@ -421,7 +420,6 @@
<ItemGroup>
<ClCompile Include="ABICxxModule.cpp" />
<ClCompile Include="ABIViewManager.cpp" />
<ClCompile Include="Base\CoreNativeModules.cpp" />
<ClCompile Include="Base\CoreUIManagers.cpp" />
<ClCompile Include="CoreAppPage.cpp">
<DependentUpon>CoreAppPage.xaml</DependentUpon>
Expand Down Expand Up @@ -679,4 +677,4 @@
</ClCompile>
</ItemGroup>
</Target>
</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
<ClCompile Include="ReactSupport.cpp" />
<ClCompile Include="TestHook.cpp" />
<ClCompile Include="ViewManagersProvider.cpp" />
<ClCompile Include="Base\CoreNativeModules.cpp">
<Filter>Base</Filter>
</ClCompile>
<ClCompile Include="Base\CoreUIManagers.cpp">
<Filter>Base</Filter>
</ClCompile>
Expand Down Expand Up @@ -357,9 +354,6 @@
<ClInclude Include="RedBox.h" />
<ClInclude Include="TestHook.h" />
<ClInclude Include="ViewManagersProvider.h" />
<ClInclude Include="Base\CoreNativeModules.h">
<Filter>Base</Filter>
</ClInclude>
<ClInclude Include="Modules\AccessibilityInfoModule.h">
<Filter>Modules</Filter>
</ClInclude>
Expand Down Expand Up @@ -632,7 +626,6 @@
<ClInclude Include="Views\IXamlRootView.h">
<Filter>Views</Filter>
</ClInclude>
<ClInclude Include="JsiApi.h" />
<ClInclude Include="RedBoxErrorInfo.h" />
<ClInclude Include="RedBoxErrorFrameInfo.h" />
<ClInclude Include="Views\Image\Effects.h">
Expand Down
21 changes: 11 additions & 10 deletions vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
#include "MsoUtils.h"

#include <AppModelHelpers.h>
#include <Base/CoreNativeModules.h>
#include <Threading/MessageDispatchQueue.h>
#include <Threading/MessageQueueThreadFactory.h>
#include <appModel.h>
Expand All @@ -30,7 +29,6 @@
#include <QuirkSettings.h>
#include <Shared/DevServerHelper.h>
#include <Views/ViewManager.h>
#include <base/CoreNativeModules.h>
#include <dispatchQueue/dispatchQueue.h>
#include "DynamicWriter.h"
#ifndef CORE_ABI
Expand Down Expand Up @@ -86,6 +84,7 @@
#include <tuple>
#include "ChakraRuntimeHolder.h"

#include <CreateModules.h>
#include <Utils/Helpers.h>
#include "CrashManager.h"
#include "JsiApi.h"
Expand Down Expand Up @@ -392,6 +391,16 @@ void ReactInstanceWin::LoadModules(
registerTurboModule(
L"Timing", winrt::Microsoft::ReactNative::MakeTurboModuleProvider<::Microsoft::ReactNative::Timing>());
#endif

registerTurboModule(::Microsoft::React::GetBlobTurboModuleName(), ::Microsoft::React::GetBlobModuleProvider());

registerTurboModule(::Microsoft::React::GetHttpTurboModuleName(), ::Microsoft::React::GetHttpModuleProvider());

registerTurboModule(
::Microsoft::React::GetFileReaderTurboModuleName(), ::Microsoft::React::GetFileReaderModuleProvider());

registerTurboModule(
::Microsoft::React::GetWebSocketTurboModuleName(), ::Microsoft::React::GetWebSocketModuleProvider());
}

//! Initialize() is called from the native queue.
Expand Down Expand Up @@ -459,15 +468,7 @@ void ReactInstanceWin::Initialize() noexcept {
}
};

#ifdef CORE_ABI
std::vector<facebook::react::NativeModuleDescription> cxxModules;
#else
// Acquire default modules and then populate with custom modules.
// Note that some of these have custom thread affinity.
std::vector<facebook::react::NativeModuleDescription> cxxModules =
Microsoft::ReactNative::GetCoreModules(m_batchingUIThread, m_jsMessageThread.Load(), m_reactContext);
#endif

auto nmp = std::make_shared<winrt::Microsoft::ReactNative::NativeModulesProvider>();

LoadModules(nmp, m_options.TurboModuleProvider);
Expand Down
32 changes: 27 additions & 5 deletions vnext/Shared/CreateModules.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

// React Native
#include <cxxreact/CxxModule.h>
#include <smartPtr/cntPtr.h>

// Windows API
#include <winrt/Windows.Foundation.h>
Expand All @@ -14,12 +13,16 @@
#include <memory>

// Forward declarations. Desktop projects can not access <React.h>
namespace winrt::Microsoft::ReactNative {
struct ReactContext;
struct ReactModuleProvider;
} // namespace winrt::Microsoft::ReactNative

namespace Mso::React {
struct IReactContext;
}

namespace facebook {
namespace react {
namespace facebook::react {

class MessageQueueThread;

Expand All @@ -29,11 +32,12 @@ class MessageQueueThread;
extern std::unique_ptr<facebook::xplat::module::CxxModule> CreateTimingModule(
const std::shared_ptr<facebook::react::MessageQueueThread> &nativeThread) noexcept;

} // namespace react
} // namespace facebook
} // namespace facebook::react

namespace Microsoft::React {

#pragma region CxxModules

extern const char *GetHttpModuleName() noexcept;
extern std::unique_ptr<facebook::xplat::module::CxxModule> CreateHttpModule(
winrt::Windows::Foundation::IInspectable const &inspectableProperties) noexcept;
Expand All @@ -50,4 +54,22 @@ extern const char *GetFileReaderModuleName() noexcept;
extern std::unique_ptr<facebook::xplat::module::CxxModule> CreateFileReaderModule(
winrt::Windows::Foundation::IInspectable const &inspectableProperties) noexcept;

#pragma endregion CxxModules

#pragma region TurboModules

extern const wchar_t *GetBlobTurboModuleName() noexcept;
extern const winrt::Microsoft::ReactNative::ReactModuleProvider &GetBlobModuleProvider() noexcept;

extern const wchar_t *GetHttpTurboModuleName() noexcept;
extern const winrt::Microsoft::ReactNative::ReactModuleProvider &GetHttpModuleProvider() noexcept;

extern const wchar_t *GetFileReaderTurboModuleName() noexcept;
extern const winrt::Microsoft::ReactNative::ReactModuleProvider &GetFileReaderModuleProvider() noexcept;

extern const wchar_t *GetWebSocketTurboModuleName() noexcept;
extern const winrt::Microsoft::ReactNative::ReactModuleProvider &GetWebSocketModuleProvider() noexcept;

#pragma endregion TurboModules

} // namespace Microsoft::React
13 changes: 13 additions & 0 deletions vnext/Shared/Modules/BlobModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "BlobModule.h"

#include <CreateModules.h>
#include <Modules/CxxModuleUtilities.h>

// React Native
Expand All @@ -20,8 +21,12 @@ namespace msrn = winrt::Microsoft::ReactNative;

namespace {
constexpr char s_moduleName[] = "BlobModule";
constexpr wchar_t s_moduleNameW[] = L"BlobModule";

const auto &blobKeys = IBlobResource::FieldNames();

msrn::ReactModuleProvider s_moduleProvider = msrn::MakeTurboModuleProvider<Microsoft::React::BlobTurboModule>();

} // namespace

namespace Microsoft::React {
Expand Down Expand Up @@ -156,4 +161,12 @@ vector<module::CxxModule::Method> BlobModule::getMethods() {
return nullptr;
}

/*extern*/ const wchar_t *GetBlobTurboModuleName() noexcept {
return s_moduleNameW;
}

/*extern*/ const msrn::ReactModuleProvider &GetBlobModuleProvider() noexcept {
return s_moduleProvider;
}

} // namespace Microsoft::React
12 changes: 12 additions & 0 deletions vnext/Shared/Modules/FileReaderModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "FileReaderModule.h"

#include <CreateModules.h>
#include <ReactPropertyBag.h>
#include <sstream>

Expand All @@ -28,6 +29,9 @@ using winrt::Windows::Foundation::IInspectable;

namespace {
constexpr char s_moduleName[] = "FileReaderModule";
constexpr wchar_t s_moduleNameW[] = L"FileReaderModule";

msrn::ReactModuleProvider s_moduleProvider = msrn::MakeTurboModuleProvider<Microsoft::React::FileReaderTurboModule>();
} // namespace

namespace Microsoft::React {
Expand Down Expand Up @@ -198,4 +202,12 @@ void FileReaderTurboModule::ReadAsText(
return nullptr;
}

/*extern*/ const wchar_t *GetFileReaderTurboModuleName() noexcept {
return s_moduleNameW;
}

/*extern*/ const msrn::ReactModuleProvider &GetFileReaderModuleProvider() noexcept {
return s_moduleProvider;
}

} // namespace Microsoft::React
12 changes: 12 additions & 0 deletions vnext/Shared/Modules/HttpModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include "HttpModule.h"

#include <CreateModules.h>
#include <Modules/CxxModuleUtilities.h>
#include <ReactPropertyBag.h>

Expand Down Expand Up @@ -32,6 +33,7 @@ using Microsoft::React::Modules::SendEvent;
using Microsoft::React::Networking::IHttpResource;

constexpr char s_moduleName[] = "Networking";
constexpr wchar_t s_moduleNameW[] = L"Networking";

// React event names
constexpr char completedResponse[] = "didCompleteNetworkResponse";
Expand All @@ -48,6 +50,8 @@ constexpr wchar_t receivedIncrementalDataW[] = L"didReceiveNetworkIncrementalDat
constexpr wchar_t receivedDataProgressW[] = L"didReceiveNetworkDataProgress";
constexpr wchar_t receivedDataW[] = L"didReceiveNetworkData";

msrn::ReactModuleProvider s_moduleProvider = msrn::MakeTurboModuleProvider<Microsoft::React::HttpTurboModule>();

static void SetUpHttpResource(
shared_ptr<IHttpResource> resource,
weak_ptr<Instance> weakReactInstance,
Expand Down Expand Up @@ -327,4 +331,12 @@ std::vector<facebook::xplat::module::CxxModule::Method> HttpModule::getMethods()
return s_moduleName;
}

/*extern*/ const wchar_t *GetHttpTurboModuleName() noexcept {
return s_moduleNameW;
}

/*extern*/ const msrn::ReactModuleProvider &GetHttpModuleProvider() noexcept {
return s_moduleProvider;
}

} // namespace Microsoft::React
12 changes: 12 additions & 0 deletions vnext/Shared/Modules/WebSocketModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <Modules/WebSocketModule.h>
#include <Modules/WebSocketTurboModule.h>

#include <CreateModules.h>
#include <Modules/CxxModuleUtilities.h>
#include <Modules/IWebSocketModuleContentHandler.h>
#include <ReactPropertyBag.h>
Expand Down Expand Up @@ -50,6 +51,9 @@ using Microsoft::React::Modules::SendEvent;
using Microsoft::React::Networking::IWebSocketResource;

constexpr char s_moduleName[] = "WebSocketModule";
constexpr wchar_t s_moduleNameW[] = L"WebSocketModule";

msrn::ReactModuleProvider s_moduleProvider = msrn::MakeTurboModuleProvider<Microsoft::React::WebSocketTurboModule>();

static shared_ptr<IWebSocketResource>
GetOrCreateWebSocket(int64_t id, string &&url, weak_ptr<WebSocketModule::SharedState> weakState) {
Expand Down Expand Up @@ -495,4 +499,12 @@ void WebSocketTurboModule::RemoveListeners(double /*count*/) noexcept {}
return nullptr;
}

/*extern*/ const wchar_t *GetWebSocketTurboModuleName() noexcept {
return s_moduleNameW;
}

/*extern*/ const msrn::ReactModuleProvider &GetWebSocketModuleProvider() noexcept {
return s_moduleProvider;
}

} // namespace Microsoft::React

0 comments on commit 41e884a

Please sign in to comment.