protected async void Run(CancellationToken cancellationToken, Uri uri) { WebSocket = new ClientWebSocket(); OnConnecting(); WebSocket = await Connection.OpenConnection(WebSocket, uri); if (WebSocket.State == WebSocketState.Open) { OnConnected(); } while (WebSocket.State == WebSocketState.Open) { if (cancellationToken.IsCancellationRequested) { await Cancel(WebSocket); break; } ICommand message = null; lock (queueLock) { message = OutgoingMessages.Any() ? OutgoingMessages.Dequeue() : null; } if (message != null) { await SendMessage(WebSocket, message); } } System.Diagnostics.Trace.WriteLine($"Connection closed. Reason: {WebSocket.CloseStatus}, Details: {WebSocket.CloseStatusDescription}"); OnDisconnect(); }
void IDataStore.Save(OutgoingSmsMessage msg) { if (!OutgoingMessages.Any(m => m.Id == msg.Id)) { OutgoingMessages.Add(msg); } SaveChanges(); }
/// <summary> /// This should be call before doing final storage, will reduce the size of /// unused fields /// </summary> public void SetEmptyValueToNull() { foreach (var err in ErrorMessages) { err.SetEmptyValueToNull(); } if (String.IsNullOrEmpty(MediaItemId)) { MediaItemId = null; } if (String.IsNullOrEmpty(MessageId)) { MessageId = null; } if (!Log.Any()) { Log = null; } if (!OutputCommands.Any()) { OutputCommands = null; } if (!OutgoingMessages.Any()) { OutgoingMessages = null; } if (!ErrorMessages.Any()) { ErrorMessages = null; } if (!InfoMessages.Any()) { InfoMessages = null; } if (!WarningMessages.Any()) { WarningMessages = null; } if (Envelope.SetEmptyValueToNull()) { Envelope = null; } }