public static async Task Disconnect(bool byMission = false) { if (bw.WorkerSupportsCancellation) { bw.CancelAsync(); } bw.Dispose(); //if (bw.WorkerSupportsCancellation) //{ //} //isSelfServer = false; if (isConnected) { if (client.State != CommunicationState.Faulted) { try { await client.DisconnectAsync(ID); } catch (Exception e) { Log.Instance.W(client, "Error appeared when you've tried to send message. Try again. " + e.Message); } } } //bw = new BackgroundWorker(); isConnected = false; //isSelfServer = false; client = null; ID = 0; currentlyUpdating = false; currentOrder = null; scan = new NetworkComputers(); ClientReadiness = false; LeaderServer.CurrentServer = null; ServerUser.Current.ID = 0; ServerUser.Current.LastSeen = DateTime.MinValue; ServerUser.Current.isLeader = false; ServerUser.Current.operationContext = null; ServerUser.Current.MissionForClient = 0; ServerUser.Current.Name = string.Empty; ServerUser.Current.Order = null; ServerUser.Current.Ready = false; CurrentDeliverer = null; if (!byMission) { ClientStateChanged?.Invoke(ClientState.Offline); } }