public async Task<ResponseObject> SendDatabaseRequest (RequestObject request) { var returnObj = new ResponseObject(); using (var client = new HttpClient ()) { client.BaseAddress = new Uri(this.url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(@"application/json")); string relativePath; switch (request.RequestType) { case RequestType.GetAuthenticationRequest: { relativePath = GetAuthRequestURI (request); break; } case RequestType.GetAuthenticationUsernameRequest: { relativePath = GetAuthUserURI (request); break; } case RequestType.GetFieldRequest: { relativePath = GetFieldRequestURI (request); break; } case RequestType.PostFieldRequest: { relativePath = PostFieldRequestURI (request); break; } case RequestType.PostCreateUser: { relativePath = PostCreatePrintURI (request); break; } case RequestType.DeleteFieldRequest: { relativePath = DeleteFieldURI (request); break; } default: { throw new NotImplementedException (); } } StringContent requestContent = new StringContent(JsonConvert.SerializeObject(request)); using (var response = await client.PostAsync (relativePath, requestContent)) { if (response.IsSuccessStatusCode) { // We've received a successful response. Sweet :) var body = await response.Content.ReadAsStringAsync (); returnObj = JsonConvert.DeserializeObject<ResponseObject> (body); } else { // We've encountered an error. Console.WriteLine ("Error Parsing JSON"); } } } return returnObj; }
//Disable the "async" warning until we actually implement the async parts. #pragma warning disable 1998 private static async void HandleRequest (IAsyncResult result) { // Note for all of this: // We're good as long as async operators work fine across platforms. // We will enter into callback hell if they don't. HttpListener listener = (HttpListener)result.AsyncState; HttpListenerContext context = listener.EndGetContext (result); var httpRequest = context.Request; RequestObject requestObject = new RequestObject (); requestObject.RequestType = RequestType.InvalidRequest; ResponseObject databaseResponse = new ResponseObject (); try { requestObject = ParseRequest (httpRequest); if (requestObject.RequestType == RequestType.InvalidRequest) { // Handle us receiving a malformed request. throw new Exception("The request could not be properly parsed"); } // Console.WriteLine (requestObject.RequestType); // ================================================================= // Open a connection to the peripheral so that we can receive // a finger print from the user. // ================================================================= if (requestObject.RequestType == RequestType.GetAuthenticationRequest) { // Console.WriteLine ("Please enter your fingerprint:"); // var user = Console.ReadLine (); // var temp = new List<string>() {"Batman", "Superman", "Flash", "Wonderwoman", "Green Lantern", "Spiderman", "Green Arrow"}; // string user; // lock (o) { // user = temp [r.Next (temp.Count)]; // } // // // Randomly authenticate one of our users. // requestObject.Fields.Add ("fingerprint", user); PeripheralConnection peripheral = PeripheralConnection.Instance; // This either opens a new connection or simply verifies the existing // connection is good. await m.WaitAsync(); await peripheral.TryOpenConnection (); m.Release(); await peripheral.RequestTemplate(requestObject); } RemoteConnectionManager databaseManager = new RemoteConnectionManager (connectionString); databaseResponse = await databaseManager.SendDatabaseRequest (requestObject); } catch (Exception ex) { Console.WriteLine (ex.Message); } finally { var responseText = GenerateResponse (requestObject, databaseResponse); var responseBytes = System.Text.Encoding.UTF8.GetBytes (responseText); // Pretty simple, get a handle to the response packet and the output stream. var httpResponse = context.Response; httpResponse.ContentLength64 = responseBytes.Length; var outputStream = httpResponse.OutputStream; // Write the response to the buffer and then close the connection. Note that // These might take a while to do. outputStream.Write (responseBytes, 0, responseBytes.Length); outputStream.Close (); } }
private static string GenerateResponse (RequestObject request, ResponseObject dbResponse) { switch (request.RequestType) { case RequestType.GetAuthenticationRequest: { List<string> output = new List<string> (); output.Add (dbResponse.SessionID); output.Add (dbResponse.ResponseCode.ToString ()); return JsonConvert.SerializeObject (output); } case RequestType.GetFieldRequest: { dbResponse.Responses.Add (dbResponse.ResponseCode.ToString ()); return JsonConvert.SerializeObject (dbResponse.Responses); } case RequestType.PostFieldRequest: { List<string> output = new List<string> (); output.Add (dbResponse.ResponseCode.ToString ()); return JsonConvert.SerializeObject (output); } case RequestType.PostCreateUser: { break; } case RequestType.DeleteFieldRequest: { List<string> output = new List<string> (); output.Add (dbResponse.ResponseCode.ToString ()); return JsonConvert.SerializeObject (output); } } return String.Empty; }