# Path: il2fb/ds/airbridge/typing.py

# 
# Path: il2fb/ds/airbridge/typing.py



import logging
import threading
from typing import Callable
from il2fb.commons.events import Event, EventParsingException
from il2fb.commons.structures import BaseStructure
from il2fb.ds.airbridge.typing import EventHandler
from il2fb.ds.airbridge.typing import StringOrNoneProducer, StringHandler
        self,
        string_producer: StringOrNoneProducer,
        string_parser: Callable[[str], Event],
    ):
        self._string_producer = string_producer
        self._string_parser = string_parser

        self._events_subscribers = []
        self._events_subscribers_lock = threading.Lock()

        self._not_parsed_strings_subscribers = []
        self._not_parsed_strings_subscribers_lock = threading.Lock()

    def subscribe_to_events(self, subscriber: EventHandler) -> None:
        with self._events_subscribers_lock:
            self._events_subscribers.append(subscriber)

    def unsubscribe_from_events(self, subscriber: EventHandler) -> None:
        with self._events_subscribers_lock:
            self._events_subscribers.remove(subscriber)

    def subscribe_to_not_parsed_strings(
        self,
        subscriber: StringHandler,
    ) -> None:
        with self._not_parsed_strings_subscribers_lock:
            self._not_parsed_strings_subscribers.append(subscriber)

    def unsubscribe_from_not_parsed_strings(
        self,

# Path: il2fb/ds/airbridge/typing.py

# 
# Path: il2fb/ds/airbridge/typing.py



# Path: il2fb/ds/airbridge/dedicated_server/game_log.py
import logging
import threading
from typing import Callable
from il2fb.commons.events import Event, EventParsingException
from il2fb.commons.structures import BaseStructure
from il2fb.ds.airbridge.typing import EventHandler
from il2fb.ds.airbridge.typing import StringOrNoneProducer, StringHandler

        self,
        string_producer: StringOrNoneProducer,
        string_parser: Callable[[str], Event],
    ):
        self._string_producer = string_producer
        self._string_parser = string_parser

        self._events_subscribers = []
        self._events_subscribers_lock = threading.Lock()

        self._not_parsed_strings_subscribers = []
        self._not_parsed_strings_subscribers_lock = threading.Lock()

    def subscribe_to_events(self, subscriber: EventHandler) -> None:
        with self._events_subscribers_lock:
            self._events_subscribers.append(subscriber)

    def unsubscribe_from_events(self, subscriber: EventHandler) -> None:
        with self._events_subscribers_lock:
            self._events_subscribers.remove(subscriber)

    def subscribe_to_not_parsed_strings(
        self,
        subscriber: StringHandler,
    ) -> None:
        with self._not_parsed_strings_subscribers_lock:
            self._not_parsed_strings_subscribers.append(subscriber)

    def unsubscribe_from_not_parsed_strings(
        self,

        subscriber: StringHandler,