Соответствие подхода к ошибкам протокола и быстрых ошибок параллелистикиIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Соответствие подхода к ошибкам протокола и быстрых ошибок параллелистики

Сообщение Anonymous »

Попытка адаптироваться к протоколу, сгенерированному из мультипланома Kotlin в Objective-C, подвергнутом воздействию Swift. Я изучаю быструю параллелизенту и не уверен, как подходить к этому.

Код: Выделить всё

__attribute__((swift_name("Test")))
@protocol ComposeAppTest
@required
- (void)prepare __attribute__((swift_name("prepare()")));
- (void)start __attribute__((swift_name("start()")));
- (void)stop __attribute__((swift_name("stop()")));
@end
< /code>
Это генерирует что -то вроде этого: < /p>
// Generated protocol from Kotlin Multiplatform which I can't modify
public protocol Test {
func prepare()
func start()
func stop()
}
< /code>
Мне нужно ADPOT к этому протоколу и реализовать его в Swift 6 Env. Подготовьте 
Метод должен заблокировать вызывающего абонента до тех пор, пока все Praparation не завершится. То же самое с началом и Stop Метод. Эти методы должны вернуть контроль за вызывающим абонентом, поскольку все его тело будет обрабатываться. Но мне нужно использовать в моей реализации три актера, и некоторые методы, примененные для этих актеров, являются асинхронными, некоторые из них требуют выполнения в изоляции Mainactor. Я стараюсь до сих пор без удачи, потому что ошибки компиляции из слоя параллелизма Swift. Я не могу добавить Async к функциям, потому что я сломаю соответствие протокола. Я не могу изменить протокол ... < /p>
class DummyTest: Test {
private var connection: RTMPConnection? // this is an actor
private var stream: RTMPStream? // this is another actor
private var mixer: MediaMixer? // and this is another actor

init() {}

func prepare() { // caller need to be blocked until preparation will not finish
connection = RTMPConnection()
stream = RTMPStream(connection: connection!)
mixer = MediaMixer(
multiCamSessionEnabled: false,
multiTrackAudioMixingEnabled: false,
useManualCapture: true
)

let output = MTHKView(frame: .zero) // 1 need to be called from Main
await mixer!.setVideoOrientation(.landscapeRight) // 2
await mixer!.addOutput(stream!) // 3
await stream!.addOutput(output) // 4
}

func start() { // caller need to be blocked until method will not finish but I can't add async
do {
var response = try await connection!.connect("https://test-live-rtmp.twitch.tv:443") // 5
print(">>> Connect response: \(response)")
response = try await stream!.publish("appId") // 6
print(">>> Publish response: \(response)")
} catch RTMPConnection.Error.requestFailed(let response) {
print(">>> RTMPConnection.Error.requestFailed: \(response)")
} catch RTMPStream.Error.requestFailed(let response) {
print(">>> RTMPStream.Error.requestFailed: \(response)")
} catch {
print(">>> Other.Error: \(error)")
}
}

func stop() { // caller need to be blocked until method will not finish but I can't add async
try? await connection!.close() // 7
}
}
< /code>
Issue 1: Need to be called from Main
Issues 2, 3, 4: 'await' in a function that does not support concurrency
Issues 5, 6, 7: 'async' call in a function that does not support concurrency
< /code>
Variables connection, stream, mixer are all actors. I'm just learning Swift Concurrency and for me this is too big for beginner. I'm asking some more experienced devs how to approach for this implementation. I was thinking to use Locks but I'm trying to avoid it in favor of Swift Concurrency approach but I don't know how in this case. This is really deep water for me.

Подробнее здесь: https://stackoverflow.com/questions/796 ... s-approach
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • MySQL Server ушел из -за параллелистики?
    Anonymous » » в форуме MySql
    0 Ответы
    589 Просмотры
    Последнее сообщение Anonymous
  • Где начать проектирование системы высокой параллелистики для торговых каналов в реальном времени? [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Блокировка проблем чтения/записи и параллелистики
    Anonymous » » в форуме Linux
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Как настроить склонность к ошибкам с помощью gradle (получение различных ошибок)
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Получение более быстрых выводов тем быстрее, чем быстрее я вызываю функцию
    Гость » » в форуме Python
    0 Ответы
    139 Просмотры
    Последнее сообщение Гость

Вернуться в «IOS»