void IDataSender.CloudRequest(Guid request_id, CloudRequest request) { Datagram datagram = new Datagram { DataType = DatagramType.Cloud, MessageType = CloudDatagramDefine.CloudRequest, RequestID = request_id, Datas = request.ToByteArray() }; if (!Send(datagram)) { RunningDatas.InfoNotify("网络连接失败 请重启软件后重试"); } }
private void OnCloudRequest(Datagram datagram) { CloudRequest request = datagram.UnSerialData <CloudRequest>(); CloudResponse response = new CloudResponse(); response.Files.AddRange ( InfoReader.ReadAll ( IKXTServer.DataConvert.GetString(datagram.Sender), request.Path ) ); datagram.DataType = DatagramType.Client; datagram.MessageType = CloudDatagramDefine.CloudResponse; byte[][] buffer = response.ToByteArrays(); for (int i = 0; i < buffer.Length; ++i) { datagram.Datas = buffer[i]; if (!Send(datagram.ToByteArray())) { Notify(IKXTServer.LogLevel.Error, "数据发送异常"); Close(); return; } } datagram.MessageType = CloudDatagramDefine.CloudResFinish; datagram.Datas = null; if (!Send(datagram.ToByteArray())) { Notify(IKXTServer.LogLevel.Error, "数据发送异常"); Close(); } }
/// <inheriteddoc /> public void ProcessRequest(HttpContext context) { try { // check login ICloudPrincipal loggedInUser = null; { var data = (context.Request.ServerVariables["HTTP_AUTHORIZATION"] ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(data) == false) { if (data.ToLower().StartsWith("basic ")) { try { var base64EncodedData = data.Substring(data.IndexOf(" ")).Trim(); var blobData = Convert.FromBase64String(base64EncodedData); var strData = new UTF8Encoding().GetString(blobData); var semicolon = strData.IndexOf(":"); if (semicolon > -1) { var username = strData.Substring(0, semicolon).ToLower().Trim(); if (username == string.Empty) { username = null; } string pwd = null; if (semicolon < (strData.Length - 1)) { pwd = strData.Substring(semicolon + 1); } if (string.IsNullOrEmpty(pwd)) { pwd = null; } loggedInUser = context.GetPrincipalRepository() .TryFindPrincipalByLogin(username, pwd); } } catch { // ignore errors here } } } } if (loggedInUser == null) { context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; context.Response.AddHeader("WWW-Authenticate", "BASIC Realm=Cloud.NET"); return; } var req = new CloudRequest() { Context = context, Principal = loggedInUser, }; req.Context.Response.StatusCode = (int)HttpStatusCode.OK; this.OnProcessRequest(req); } catch (Exception ex) { context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.Response.StatusDescription = (ex.GetBaseException() ?? ex).Message ?? string.Empty; } finally { context.Response.End(); } }