Files
rr3-apk/decompiled-community/sources/com/mbridge/msdk/dycreator/bus/EventBus.java
Daniel Elliott c080f0d97f Add Discord community version (64-bit only)
- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
2026-02-18 15:48:36 -08:00

502 lines
17 KiB
Java

package com.mbridge.msdk.dycreator.bus;
import android.os.Looper;
import android.util.Log;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/* loaded from: classes4.dex */
public final class EventBus {
private static volatile EventBus b;
private boolean n;
static ExecutorService a = Executors.newCachedThreadPool();
public static String TAG = "Event";
private static final Map<Class<?>, List<Class<?>>> c = new HashMap();
private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> d = new HashMap();
private final Map<Object, List<Class<?>>> e = new HashMap();
private final Map<Class<?>, Object> f = new ConcurrentHashMap();
private final ThreadLocal<List<Object>> g = new ThreadLocal<List<Object>>() { // from class: com.mbridge.msdk.dycreator.bus.EventBus.1
@Override // java.lang.ThreadLocal
public /* synthetic */ List<Object> initialValue() {
return new ArrayList();
}
};
private final ThreadLocal<BooleanWrapper> h = new ThreadLocal<BooleanWrapper>() { // from class: com.mbridge.msdk.dycreator.bus.EventBus.2
@Override // java.lang.ThreadLocal
public /* synthetic */ BooleanWrapper initialValue() {
return new BooleanWrapper();
}
};
private String i = "onEvent";
private final HandlerPoster j = new HandlerPoster(this, Looper.getMainLooper(), 10);
private final BackgroundPoster k = new BackgroundPoster(this);
private final AsyncPoster l = new AsyncPoster(this);
private final SubscriberMethodFinder m = new SubscriberMethodFinder();
private boolean o = true;
private Map<String, Object> p = new ConcurrentHashMap();
public static final class BooleanWrapper {
boolean a;
}
public interface PostCallback {
void onPostCompleted(List<SubscriberExceptionEvent> list);
}
public static EventBus getDefault() {
if (b == null) {
synchronized (EventBus.class) {
try {
if (b == null) {
b = new EventBus();
}
} finally {
}
}
}
return b;
}
public static void clearCaches() {
SubscriberMethodFinder.a();
c.clear();
}
public static void skipMethodNameVerificationFor(Class<?> cls) {
SubscriberMethodFinder.a(cls);
}
public static void clearSkipMethodNameVerifications() {
SubscriberMethodFinder.clearSkipMethodNameVerifications();
}
public final void configureLogSubscriberExceptions(boolean z) {
if (this.n) {
throw new EventBusException("This method must be called before any registration");
}
this.o = z;
}
public final void register(Object obj) {
a(obj, this.i, false);
}
public final void register(String str, Object obj) {
Map<String, Object> map = this.p;
if (map != null && map.containsKey(str)) {
unregister(this.p.get(str));
}
this.p.put(str, obj);
a(obj, this.i, false);
}
public final void register(Object obj, String str) {
a(obj, str, false);
}
public final void registerSticky(Object obj) {
a(obj, this.i, true);
}
public final void registerSticky(Object obj, String str) {
a(obj, str, true);
}
private void a(Object obj, String str, boolean z) {
Iterator<SubscriberMethod> it = this.m.a(obj.getClass(), str).iterator();
while (it.hasNext()) {
a(obj, it.next(), z);
}
}
public final void register(Object obj, Class<?> cls, Class<?>... clsArr) {
a(obj, this.i, false, cls, clsArr);
}
public final synchronized void register(Object obj, String str, Class<?> cls, Class<?>... clsArr) {
a(obj, str, false, cls, clsArr);
}
public final void registerSticky(Object obj, Class<?> cls, Class<?>... clsArr) {
a(obj, this.i, true, cls, clsArr);
}
public final synchronized void registerSticky(Object obj, String str, Class<?> cls, Class<?>... clsArr) {
a(obj, str, true, cls, clsArr);
}
private synchronized void a(Object obj, String str, boolean z, Class<?> cls, Class<?>... clsArr) {
try {
for (SubscriberMethod subscriberMethod : this.m.a(obj.getClass(), str)) {
if (cls == subscriberMethod.c) {
a(obj, subscriberMethod, z);
} else if (clsArr != null) {
int length = clsArr.length;
int i = 0;
while (true) {
if (i >= length) {
break;
}
if (clsArr[i] == subscriberMethod.c) {
a(obj, subscriberMethod, z);
break;
}
i++;
}
}
}
} catch (Throwable th) {
throw th;
}
}
private void a(Object obj, SubscriberMethod subscriberMethod, boolean z) {
Object obj2;
this.n = true;
Class<?> cls = subscriberMethod.c;
CopyOnWriteArrayList<Subscription> copyOnWriteArrayList = this.d.get(cls);
Subscription subscription = new Subscription(obj, subscriberMethod);
if (copyOnWriteArrayList == null) {
copyOnWriteArrayList = new CopyOnWriteArrayList<>();
this.d.put(cls, copyOnWriteArrayList);
} else {
Iterator<Subscription> it = copyOnWriteArrayList.iterator();
while (it.hasNext()) {
if (it.next().equals(subscription)) {
throw new EventBusException("Subscriber " + obj.getClass() + " already registered to event " + cls);
}
}
}
subscriberMethod.a.setAccessible(true);
copyOnWriteArrayList.add(subscription);
List<Class<?>> list = this.e.get(obj);
if (list == null) {
list = new ArrayList<>();
this.e.put(obj, list);
}
list.add(cls);
if (z) {
synchronized (this.f) {
obj2 = this.f.get(cls);
}
if (obj2 != null) {
a(subscription, obj2, Looper.getMainLooper() == Looper.myLooper());
}
}
}
public final synchronized void unregister(Object obj, Class<?>... clsArr) {
try {
if (clsArr.length == 0) {
throw new IllegalArgumentException("Provide at least one event class");
}
List<Class<?>> list = this.e.get(obj);
if (list != null) {
for (Class<?> cls : clsArr) {
a(obj, cls);
list.remove(cls);
}
if (list.isEmpty()) {
this.e.remove(obj);
}
} else {
Log.w(TAG, "Subscriber to unregister was not registered before: " + obj.getClass());
}
} catch (Throwable th) {
throw th;
}
}
private void a(Object obj, Class<?> cls) {
CopyOnWriteArrayList<Subscription> copyOnWriteArrayList = this.d.get(cls);
if (copyOnWriteArrayList != null) {
int size = copyOnWriteArrayList.size();
int i = 0;
while (i < size) {
if (copyOnWriteArrayList.get(i).a == obj) {
copyOnWriteArrayList.remove(i);
i--;
size--;
}
i++;
}
}
}
public final synchronized void unregister(Object obj) {
try {
List<Class<?>> list = this.e.get(obj);
if (list != null) {
Iterator<Class<?>> it = list.iterator();
while (it.hasNext()) {
a(obj, it.next());
}
this.e.remove(obj);
} else {
Log.w(TAG, "Subscriber to unregister was not registered before: " + obj.getClass());
}
} catch (Throwable th) {
throw th;
}
}
public final synchronized void unregister(String str) {
try {
Map<String, Object> map = this.p;
if (map != null && map.containsKey(str)) {
Object remove = this.p.remove(str);
List<Class<?>> list = this.e.get(remove);
if (list != null) {
Iterator<Class<?>> it = list.iterator();
while (it.hasNext()) {
a(remove, it.next());
}
this.e.remove(remove);
} else {
Log.w(TAG, "Subscriber to unregister was not registered before: " + remove.getClass());
}
}
} catch (Throwable th) {
throw th;
}
}
public final void post(Object obj) {
CopyOnWriteArrayList<Subscription> copyOnWriteArrayList;
List<Object> list = this.g.get();
list.add(obj);
BooleanWrapper booleanWrapper = this.h.get();
if (booleanWrapper.a) {
return;
}
boolean z = Looper.getMainLooper() == Looper.myLooper();
booleanWrapper.a = true;
while (!list.isEmpty()) {
try {
Object remove = list.remove(0);
if (remove != null) {
try {
Class<?> cls = remove.getClass();
List<Class<?>> a2 = a(cls);
int size = a2.size();
boolean z2 = false;
for (int i = 0; i < size; i++) {
Class<?> cls2 = a2.get(i);
synchronized (this) {
copyOnWriteArrayList = this.d.get(cls2);
}
if (copyOnWriteArrayList != null) {
Iterator<Subscription> it = copyOnWriteArrayList.iterator();
while (it.hasNext()) {
a(it.next(), remove, z);
}
z2 = true;
}
}
if (!z2) {
StringBuilder sb = new StringBuilder();
sb.append("No subscripers registered for event ");
sb.append(cls);
if (cls != NoSubscriberEvent.class && cls != SubscriberExceptionEvent.class) {
post(new NoSubscriberEvent(this, remove));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
} finally {
booleanWrapper.a = false;
}
}
}
public final void postSticky(Object obj) {
post(obj);
synchronized (this.f) {
this.f.put(obj.getClass(), obj);
}
}
public final Object getStickyEvent(Class<?> cls) {
Object obj;
synchronized (this.f) {
obj = this.f.get(cls);
}
return obj;
}
public final Object removeStickyEvent(Class<?> cls) {
Object remove;
synchronized (this.f) {
remove = this.f.remove(cls);
}
return remove;
}
public final boolean removeStickyEvent(Object obj) {
synchronized (this.f) {
try {
Class<?> cls = obj.getClass();
if (!obj.equals(this.f.get(cls))) {
return false;
}
this.f.remove(cls);
return true;
} catch (Throwable th) {
throw th;
}
}
}
public final void release() {
if (b != null) {
b = null;
a = null;
Map<Class<?>, List<Class<?>>> map = c;
if (map != null && map.size() > 0) {
map.clear();
}
Map<Class<?>, CopyOnWriteArrayList<Subscription>> map2 = this.d;
if (map2 != null && map2.size() > 0) {
this.d.clear();
}
Map<Object, List<Class<?>>> map3 = this.e;
if (map3 != null && map3.size() > 0) {
this.e.clear();
}
Map<Class<?>, Object> map4 = this.f;
if (map4 != null && map4.size() > 0) {
this.f.clear();
}
Map<String, Object> map5 = this.p;
if (map5 == null || map5.size() <= 0) {
return;
}
this.p.clear();
}
}
/* renamed from: com.mbridge.msdk.dycreator.bus.EventBus$3, reason: invalid class name */
public static /* synthetic */ class AnonymousClass3 {
static final /* synthetic */ int[] a;
static {
int[] iArr = new int[ThreadMode.values().length];
a = iArr;
try {
iArr[ThreadMode.PostThread.ordinal()] = 1;
} catch (NoSuchFieldError unused) {
}
try {
a[ThreadMode.MainThread.ordinal()] = 2;
} catch (NoSuchFieldError unused2) {
}
try {
a[ThreadMode.BackgroundThread.ordinal()] = 3;
} catch (NoSuchFieldError unused3) {
}
try {
a[ThreadMode.Async.ordinal()] = 4;
} catch (NoSuchFieldError unused4) {
}
}
}
private void a(Subscription subscription, Object obj, boolean z) {
int i = AnonymousClass3.a[subscription.b.b.ordinal()];
if (i == 1) {
a(subscription, obj);
return;
}
if (i == 2) {
if (z) {
a(subscription, obj);
return;
} else {
this.j.a(subscription, obj);
return;
}
}
if (i == 3) {
if (z) {
this.k.enqueue(subscription, obj);
return;
} else {
a(subscription, obj);
return;
}
}
if (i == 4) {
this.l.enqueue(subscription, obj);
return;
}
throw new IllegalStateException("Unknown thread mode: " + subscription.b.b);
}
private List<Class<?>> a(Class<?> cls) {
List<Class<?>> list;
Map<Class<?>, List<Class<?>>> map = c;
synchronized (map) {
try {
list = map.get(cls);
if (list == null) {
list = new ArrayList<>();
for (Class<?> cls2 = cls; cls2 != null; cls2 = cls2.getSuperclass()) {
list.add(cls2);
a(list, cls2.getInterfaces());
}
c.put(cls, list);
}
} catch (Throwable th) {
throw th;
}
}
return list;
}
private static void a(List<Class<?>> list, Class<?>[] clsArr) {
for (Class<?> cls : clsArr) {
if (!list.contains(cls)) {
list.add(cls);
a(list, cls.getInterfaces());
}
}
}
public final void a(PendingPost pendingPost) {
Object obj = pendingPost.a;
Subscription subscription = pendingPost.b;
PendingPost.a(pendingPost);
a(subscription, obj);
}
private void a(Subscription subscription, Object obj) throws Error {
try {
subscription.b.a.invoke(subscription.a, obj);
} catch (IllegalAccessException e) {
throw new IllegalStateException("Unexpected exception", e);
} catch (InvocationTargetException e2) {
Throwable cause = e2.getCause();
if (obj instanceof SubscriberExceptionEvent) {
Log.e(TAG, "SubscriberExceptionEvent subscriber " + subscription.a.getClass() + " threw an exception", cause);
SubscriberExceptionEvent subscriberExceptionEvent = (SubscriberExceptionEvent) obj;
Log.e(TAG, "Initial event " + subscriberExceptionEvent.causingEvent + " caused exception in " + subscriberExceptionEvent.causingSubscriber, subscriberExceptionEvent.throwable);
return;
}
if (this.o) {
Log.e(TAG, "Could not dispatch event: " + obj.getClass() + " to subscribing class " + subscription.a.getClass(), cause);
}
post(new SubscriberExceptionEvent(this, cause, obj, subscription.a));
}
}
}