/// <summary> /// Connect with the Pebble. /// </summary> /// <exception cref="System.IO.IOException">Passed on when no connection can be made.</exception> public async Task ConnectAsync() { PhoneVersionResponse response; //PhoneVersionResponse is received immediately after connecting, and we must respond to it before making any other calls using (IResponseTransaction <PhoneVersionResponse> responseTransaction = _responseManager.GetTransaction <PhoneVersionResponse>()) { await _PebbleProt.ConnectAsync(); response = responseTransaction.AwaitResponse(ResponseTimeout); } if (response != null) { var message = new AppVersionResponse(); await SendMessageNoResponseAsync(Endpoint.PhoneVersion, message.GetBytes()); IsAlive = true; //get the firmware details, we'll need to know the platform and version for possible future actions var firmwareResponse = await this.GetFirmwareVersionAsync(); this.Firmware = firmwareResponse.Firmware; } else { Disconnect(); } }
private void RawMessageReceived(object sender, RawMessageReceivedEventArgs e) { var endpoint = (Endpoint)e.Endpoint; IResponse response = _responseManager.HandleResponse(endpoint, e.Payload); if (response != null) { if (e.Endpoint == (ushort)Endpoint.PhoneVersion) { var message = new AppVersionResponse(); SendMessageNoResponseAsync(Endpoint.PhoneVersion, message.GetBytes()).Wait(); } //Check for callbacks List <CallbackContainer> callbacks; if (_callbackHandlers.TryGetValue(response.GetType(), out callbacks)) { foreach (CallbackContainer callback in callbacks) { callback.Invoke(response); } } } }