Esempio n. 1
0
    public override async Task Initialize()
    {
        await Task.Delay(1000);

        NodeId = await signaler.ConnectAsync();

        Logger.Log("Client", "Connected to signaling server");
        Logger.Debug("Client", $"My NodeId is {NodeId}");
        await Task.Delay(1000);

        await conn.SetupAsync(signaler, false);

        Logger.Log("Client", "Connected to server");

        var nodeIdCancelSource = new CancellationTokenSource();

        nodeIdCancelSource.CancelAfter(NodeIdRetryTimeout);
        var nodeIdCancel = nodeIdCancelSource.Token;

        while (true)
        {
            nodeIdCancel.ThrowIfCancellationRequested();
            // FIXME: this message has not meaningful but seems working as a kind of "ready"
            if (await conn.ReceiveMessageAsync <ITcpMessage>(Connection.ChannelType.Control, nodeIdCancel) is NodeIdMessage nodeIdMsg)
            {
                Logger.Debug("Client", $"Received NodeId={nodeIdMsg.NodeId}");
                break;
            }
        }

        var cancelSource = new CancellationTokenSource();

        conn.OnDisconnect += () => cancelSource.Cancel();
        var _ = ProcessBlobMessagesAsync(ServerNodeId, conn, cancelSource.Token);
    }