mirror of
https://github.com/status-im/react-native.git
synced 2025-01-17 13:01:13 +00:00
beb3fcda34
Summary: This is the first attempt to implement some base part of event dispatching pipeline from end-to-end. Even when it is working, all this is still incomplete and generally up in the air. We are still messing proper implementation of event queue, priority, and synchronization of react reconciliation process with event scheduling. Reviewed By: fkgozali Differential Revision: D8212271 fbshipit-source-id: 92f9427d14726441c70ffff294ac95eeb004152a
63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <mutex>
|
|
|
|
#include <folly/dynamic.h>
|
|
#include <fabric/core/EventDispatcher.h>
|
|
#include <fabric/core/EventPrimitives.h>
|
|
#include <fabric/core/ReactPrimitives.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
class EventHandlers;
|
|
|
|
using SharedEventHandlers = std::shared_ptr<const EventHandlers>;
|
|
|
|
/*
|
|
* Base class for all particular typed event handlers.
|
|
* Stores `InstanceHandle` identifying a particular component and the pointer
|
|
* to `EventDispatcher` which is responsible for delivering the event.
|
|
*
|
|
* TODO: Reconsider naming of all event-related things.
|
|
*/
|
|
class EventHandlers {
|
|
|
|
public:
|
|
EventHandlers(const InstanceHandle &instanceHandle, const Tag &tag, const SharedEventDispatcher &eventDispatcher);
|
|
virtual ~EventHandlers();
|
|
|
|
protected:
|
|
|
|
/*
|
|
* Initates an event delivery process.
|
|
* Is used by particular subclasses only.
|
|
*/
|
|
void dispatchEvent(
|
|
const std::string &type,
|
|
const folly::dynamic &payload = folly::dynamic::object(),
|
|
const EventPriority &priority = EventPriority::AsynchronousBatched
|
|
) const;
|
|
|
|
private:
|
|
|
|
void createEventTargetIfNeeded() const;
|
|
void releaseEventTargetIfNeeded() const;
|
|
|
|
InstanceHandle instanceHandle_;
|
|
Tag tag_;
|
|
std::weak_ptr<const EventDispatcher> eventDispatcher_;
|
|
mutable EventTarget eventTarget_ {nullptr};
|
|
mutable std::mutex mutex_;
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|