Esempio n. 1
0
        private async Task ConnectClient()
        {
            if (identity is null)
            {
                throw new InvalidOperationException();
            }

            if (closed)
            {
                return;
            }

            TsVersionSigned?versionSign;

            if (!string.IsNullOrEmpty(config.Connect.ClientVersion.Build.Value))
            {
                var versionConf = config.Connect.ClientVersion;
                versionSign = TsVersionSigned.TryParse(versionConf.Build, versionConf.Platform.Value, versionConf.Sign);

                if (versionSign is null)
                {
                    Log.Warn("Invalid version sign, falling back to unknown :P");
                    versionSign = TsVersionSigned.VER_WIN_3_X_X;
                }
            }
            else if (Tools.IsLinux)
            {
                versionSign = TsVersionSigned.VER_LIN_3_X_X;
            }
            else
            {
                versionSign = TsVersionSigned.VER_WIN_3_X_X;
            }

            var connectionConfig = new ConnectionDataFull(config.Connect.Address, identity,
                                                          versionSign: versionSign,
                                                          username: config.Connect.Name,
                                                          serverPassword: config.Connect.ServerPassword.Get(),
                                                          defaultChannel: reconnectChannel?.ToPath() ?? config.Connect.Channel,
                                                          defaultChannelPassword: config.Connect.ChannelPassword.Get(),
                                                          logId: id);

            config.SaveWhenExists().UnwrapToLog(Log);

            if (!(await ts3FullClient.Connect(connectionConfig)).GetOk(out var error))
            {
                Log.Error("Could not connect: {0}", error.ErrorFormat());
                return;
            }

            Log.Info("Client connected.");
            reconnectCounter = 0;
            lastReconnect    = null;

            await OnBotConnected.InvokeAsync(this);
        }
Esempio n. 2
0
 public Task ClientInit(string nickname, bool inputHardware, bool outputHardware,
                        string defaultChannel, string defaultChannelPassword, string serverPassword, string metaData,
                        string nicknamePhonetic, string defaultToken, string hwid, TsVersionSigned versionSign, ulong keyOffset)
 => SendNoResponsed(new TsCommand("clientinit")
 {
     { "client_nickname", nickname },
     { "client_version", versionSign.Version },
     { "client_platform", versionSign.Platform },
     { "client_input_hardware", inputHardware },
     { "client_output_hardware", outputHardware },
     { "client_default_channel", defaultChannel },
     { "client_default_channel_password", defaultChannelPassword },    // base64(sha1(pass))
     { "client_server_password", serverPassword },                     // base64(sha1(pass))
     { "client_meta_data", metaData },
     { "client_version_sign", versionSign.Sign },
     { "client_key_offset", keyOffset },
     { "client_nickname_phonetic", nicknamePhonetic },
     { "client_default_token", defaultToken },
     { "hwid", hwid },
 });