public void Init(out SAMNetworkConnection.ErrorType error) { if (_client == null) { error = SAMNetworkConnection.ErrorType.BluetoothAdapterNotFound; return; } _client.StartAdapter(); _lastState = _client.State; _currentConnDevice = null; _lastScanDevices.Clear(); Events.Clear(); _isScanning = false; _scanStartTime = MonoSAMGame.CurrentTime.TotalElapsedSeconds; if (_client.State == BluetoothAdapterState.AdapterNotFound) { error = SAMNetworkConnection.ErrorType.BluetoothAdapterNotFound; } else if (_client.State == BluetoothAdapterState.AdapterNotFound) { error = SAMNetworkConnection.ErrorType.BluetoothAdapterNoPermission; } else if (_client.State == BluetoothAdapterState.Error) { error = SAMNetworkConnection.ErrorType.NetworkMediumInternalError; } else { error = SAMNetworkConnection.ErrorType.None; } }
public void Update(out SAMNetworkConnection.ErrorType err) { err = SAMNetworkConnection.ErrorType.None; }
public void Init(out SAMNetworkConnection.ErrorType error) { _client.Connect(_ip, _port); error = SAMNetworkConnection.ErrorType.None; }
public static string FormatNetworkErrorMessage(SAMNetworkConnection.ErrorType type, object data) { switch (type) { case SAMNetworkConnection.ErrorType.None: return(string.Empty); case SAMNetworkConnection.ErrorType.ProxyServerTimeout: return(L10N.T(STR_MP_TIMEOUT)); case SAMNetworkConnection.ErrorType.ServerUserTimeout: return(L10N.T(STR_MP_TIMEOUT)); case SAMNetworkConnection.ErrorType.UserTimeout: return(L10N.TF(STR_MP_TIMEOUT_USER, data)); case SAMNetworkConnection.ErrorType.NotInLobby: return(L10N.T(STR_MP_NOTINLOBBY)); case SAMNetworkConnection.ErrorType.SessionNotFound: return(L10N.T(STR_MP_SESSIONNOTFOUND)); case SAMNetworkConnection.ErrorType.AuthentificationFailed: return(L10N.T(STR_MP_AUTHFAILED)); case SAMNetworkConnection.ErrorType.LobbyFull: return(L10N.T(STR_MP_LOBBYFULL)); case SAMNetworkConnection.ErrorType.GameVersionMismatch: return(L10N.TF(STR_MP_VERSIONMISMATCH, GDConstants.Version.ToString())); case SAMNetworkConnection.ErrorType.LevelNotFound: return(L10N.T(STR_MP_LEVELNOTFOUND)); case SAMNetworkConnection.ErrorType.LevelVersionMismatch: return(L10N.T(STR_MP_LEVELMISMATCH)); case SAMNetworkConnection.ErrorType.UserDisconnect: return(L10N.TF(STR_MP_USERDISCONNECT, data)); case SAMNetworkConnection.ErrorType.ServerDisconnect: return(L10N.T(STR_MP_SERVERDISCONNECT)); case SAMNetworkConnection.ErrorType.BluetoothAdapterNotFound: return(L10N.T(STR_MP_BTADAPTERNULL)); case SAMNetworkConnection.ErrorType.BluetoothAdapterNoPermission: return(L10N.T(STR_MP_BTADAPTERPERMDENIED)); case SAMNetworkConnection.ErrorType.BluetoothInternalError: return(L10N.T(STR_MP_INTERNAL)); case SAMNetworkConnection.ErrorType.BluetoothNotEnabled: return(L10N.T(STR_MP_BTDISABLED)); case SAMNetworkConnection.ErrorType.P2PConnectionFailed: return(L10N.T(STR_MP_DIRECTCONNFAIL)); case SAMNetworkConnection.ErrorType.P2PConnectionLost: return(L10N.T(STR_MP_DIRECTCONNLOST)); default: SAMLog.Error("L10NI::EnumSwitch_FNEM", "type = " + type); return(string.Empty); } }
public void Update(out SAMNetworkConnection.ErrorType error) { var xlastState = _lastState; _lastState = _client.State; _client.Update(); if (_client.State == BluetoothAdapterState.AdapterNotFound) { error = SAMNetworkConnection.ErrorType.BluetoothAdapterNotFound; return; } if (_client.State == BluetoothAdapterState.PermissionNotGranted) { error = SAMNetworkConnection.ErrorType.BluetoothAdapterNoPermission; return; } if (_client.State == BluetoothAdapterState.Error) { error = SAMNetworkConnection.ErrorType.NetworkMediumInternalError; return; } if (_client.State == BluetoothAdapterState.NotEnabledByUser) { error = SAMNetworkConnection.ErrorType.BluetoothNotEnabled; return; } if (_client.State == BluetoothAdapterState.ConnectionFailed) { if (_lastScanDevices.Any()) { if (_currentConnDevice != null) { SAMLog.Warning("BNM::ConnectionFailed", $"Connection to {_currentConnDevice.Name} failed"); Events.Enqueue(new BluetoothMediumEvent(BluetoothMediumEvent.BTEvent.ConnectionFailed, _currentConnDevice.Name)); } _currentConnDevice = _lastScanDevices.First(); _lastScanDevices.Remove(_currentConnDevice); _isScanning = false; SAMLog.Debug($"Try connect to {_currentConnDevice.Name} ({_currentConnDevice.Address}|{_currentConnDevice.DeviceClass}|{_currentConnDevice.Type})"); Events.Enqueue(new BluetoothMediumEvent(BluetoothMediumEvent.BTEvent.TryConnection, _currentConnDevice.Name)); _client.Connect(_currentConnDevice); error = SAMNetworkConnection.ErrorType.None; } else { _isScanning = true; _client.StartScan(); _scanStartTime = MonoSAMGame.CurrentTime.TotalElapsedSeconds; error = SAMNetworkConnection.ErrorType.None; } return; } if (_client.State == BluetoothAdapterState.ConnectionLost) { error = SAMNetworkConnection.ErrorType.P2PConnectionLost; return; } if (_client.State == BluetoothAdapterState.Active) { if (_isScanning) { _lastScanDevices = _client.FoundDevices; SAMLog.Debug($"Scanning finished {_lastScanDevices.Count} devices found"); if (_lastScanDevices.Any()) { foreach (var dd in _lastScanDevices) { SAMLog.Debug($"Device found: {dd.Name} ({dd.Address}|{dd.DeviceClass}|{dd.Type})"); } _currentConnDevice = _lastScanDevices.First(); _lastScanDevices.Remove(_currentConnDevice); SAMLog.Debug($"Try connect to {_currentConnDevice.Name} ({_currentConnDevice.Address}|{_currentConnDevice.DeviceClass}|{_currentConnDevice.Type})"); _isScanning = false; _client.Connect(_currentConnDevice); } else { _isScanning = true; _client.StartScan(); _scanStartTime = MonoSAMGame.CurrentTime.TotalElapsedSeconds; } } } if (_client.State == BluetoothAdapterState.Scanning) { if (_isScanning && !_client.IsDiscovering && MonoSAMGame.CurrentTime.TotalElapsedSeconds - _scanStartTime > 30) { error = SAMNetworkConnection.ErrorType.None; SAMLog.Warning("BNM::ForceScanCancel", "Cancel scan by force"); _client.CancelScan(); return; } } if (_client.State == BluetoothAdapterState.Listen) { error = SAMNetworkConnection.ErrorType.None; if (!_client.IsDiscoverable) { _client.ContinueWaiting(); } return; } if (_client.State == BluetoothAdapterState.Connected) { if (xlastState == BluetoothAdapterState.Connecting && _currentConnDevice != null) { Events.Enqueue(new BluetoothMediumEvent(BluetoothMediumEvent.BTEvent.ConnectionSucceeded, _currentConnDevice.Name)); } } error = SAMNetworkConnection.ErrorType.None; }