添加nuget和网络请求api

This commit is contained in:
suntao committed 2021-03-22 16:06:28 +08:00
1 parent f8bcfd977f
commit f557e2f5df
45 files changed
+1682 -299

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c3657715ecf71dd4ca94ba58d3468e81
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+516
View File
@@ -0,0 +1,516 @@
using Assets.Scripts;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Assets.Scripts.Apis
{
public abstract class ApiBase
{
private static CookieContainer _cookieCollection = new CookieContainer();
public static CookieCollection cookies
{
get
{
return _cookieCollection.GetCookies(new Uri(ConfigHelper.Host));
}
//set
//{
// _cookieCollection = value;
//}
}
//protected static EasyHttp.Http.HttpClient http;
private static System.Net.Http.HttpClient httpClient;
private static HttpClientHandler httpClientHandler;
static ApiBase()
{
//http = new EasyHttp.Http.HttpClient();
//http.Request.PersistCookies = true;
httpClientHandler = new HttpClientHandler();
httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
httpClientHandler.CookieContainer = _cookieCollection;
httpClientHandler.UseCookies = true;
httpClient = new System.Net.Http.HttpClient(httpClientHandler);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("Unity", ConfigHelper.AppVersion));
}
protected async Task<bool> GetAsFileSync(string url, string fileName)
{
//var result = await Task.Factory.StartNew(() =>
//{
// var res = http.GetAsFile(ConfigHelper.Host + url, fileName);
// return res;
//});
//return result;
//using (var httpResponseMessage = await httpClient.SendAsync(CreateRequest(url, System.Net.Http.HttpMethod.Get), HttpCompletionOption.ResponseContentRead))
//{
byte[] data1 = await GetAsync(url);
if (data1 != null)
{
using (var stream = new FileStream(fileName, FileMode.Create))
{
stream.Write(data1, 0, data1.Length);
}
return true;
}
return false;
// return httpResponseMessage.IsSuccessStatusCode;
//}
}
protected async Task<byte[]> GetAsync(string url)
{
AddLanguage();
var httpResponseMessage = await httpClient.GetAsync(ConfigHelper.Host + url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
if (!httpResponseMessage.IsSuccessStatusCode)
{
return null;
}
byte[] data1 = await httpResponseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
return data1;
}
protected async Task<byte[]> GetUrlAsync(string url)
{
var httpResponseMessage = await httpClient.GetAsync(url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
if (!httpResponseMessage.IsSuccessStatusCode)
{
return null;
}
byte[] data1 = await httpResponseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
return data1;
}
//private HttpResponse Get(string url, object query = null)
//{
// return http.Get(ConfigHelper.Host + url, query);
//}
protected async Task<T> GetAsync<T>(string url)
{
//var result = await Task.Factory.StartNew(() =>
//{
// return Get(url, query);
//});
//return result;
AddLanguage();
var response = await httpClient.GetAsync(ConfigHelper.Host + url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
return await ParseJsonAsync<T>(response);
}
private async Task<T> ParseJsonAsync<T>(HttpResponseMessage response)
{
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
return JsonConvert.DeserializeObject<T>(result);
}
//protected T Post<T>(string url, object data)
//{
// //var stream = new StreamContent()
// var stringContent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
// AddLanguage();
// var response = httpClient.PostAsync(ConfigHelper.Host + url, stringContent).GetAwaiter()
// .GetResult();
// if (response.IsSuccessStatusCode == false)
// {
// //return default(T);
// throw new Exception($"服务器端返回:{ response.StatusCode }\r\n{ response.RequestMessage }");
// }
// var info = ParseJsonAsync<T>(response).GetAwaiter().GetResult();
// return info;
//}
//protected HttpResponse Post(string url, object data, IList<FileInfo> files)
//{
// var formData = data.ToDictionary();
// IList<FileData> files1 = new List<FileData>();
// foreach (var item in files)
// {
// var fileData = new FileData();
// fileData.FieldName = item.Name;
// fileData.Filename = item.FullName;
// files1.Add(fileData);
// }
// return http.Post(ConfigHelper.Host + url, formData, files1);
//}
//protected async Task<HttpResponse> PostAsync(string url, object data, IList<FileInfo> files)
//{
// var result = await Task.Factory.StartNew(() =>
// {
// return Post(url, data, files);
// });
// return result;
//}
protected string Upload(string url, object data, IList<string> files)
{
var files1 = new Dictionary<string, Stream>();
foreach (var file in files)
{
//writer.Write( // file header
// $"\r\n--{boundary}\r\nContent-Disposition: " +
// $"form-data; name=\"{ Path.GetFileName(file) }\"; filename=\"{Path.GetFileName(file)}\"\r\n" +
// "Content-Type: application/octet-stream\r\n\r\n");
//writer.Flush();
var fileStream = File.OpenRead(file);
//fileStream.CopyTo(requestStream);
files1.Add(Path.GetFileName(file), fileStream);
}
return Upload(url, data, files1);
}
/// <summary>
/// formdata
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <param name="files"></param>
/// <returns></returns>
protected string Upload(string url, object data, Dictionary<string, Stream> files)
{
//var requestContent = new MultipartFormDataContent();
//foreach (var item in files)
//{
// // here you can specify boundary if you need---^
// //var file = new System.IO.FileInfo(item);
// var bytes = System.IO.File.ReadAllBytes(item);
// var imageContent = new ByteArrayContent(bytes);
// imageContent.Headers.ContentType =
// MediaTypeHeaderValue.Parse(GetMimeType(System.IO.Path.GetExtension(item)));
// requestContent.Add(imageContent, Path.GetFileName(item), Path.GetFileName(item));
//}
//var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(data));
//foreach (var item in dict)
//{
// if (item.Value == null) continue;
// requestContent.Add(new StringContent(item.Value.ToString()), item.Key);
//}
//using (var res = await httpClient.PostAsync(ConfigHelper.Host + url, requestContent).ConfigureAwait(false))
//{
// var rrr = await res.Content.ReadAsStringAsync().ConfigureAwait(false);
// return rrr;
//}
var request = (HttpWebRequest)WebRequest.Create(ConfigHelper.Host + url);
request.UserAgent = httpClient.DefaultRequestHeaders.UserAgent.ToString();
request.Headers.Add("Language", "Zh-cn");
request.CookieContainer = new CookieContainer();
foreach (Cookie item in cookies)
{
request.CookieContainer.Add(item);
}
var postData = new StringBuilder();
var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(data));
foreach (var item in values)
{
postData.Append(WebUtility.UrlEncode($"{ item.Key }={ item.Value }&"));
}
var boundary = $"{Guid.NewGuid():N}";
request.ContentType = $"multipart/form-data; {nameof(boundary)}={boundary}";
request.Method = "POST";
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
//byte[] bytes;
//using (var stream = new MemoryStream())
//using (var writer = new StreamWriter(stream))
//{
// foreach (var ddd in values)
// {
// writer.Write( // put all POST data into request
// $"\r\n--{boundary}\r\nContent-Disposition: " +
// $"form-data; name=\"{ ddd.Key }\"\r\n\r\n{ ddd.Value }");
// }
// foreach (var file in files)
// {
// writer.Write( // file header
// $"\r\n--{boundary}\r\nContent-Disposition: " +
// $"form-data; name=\"{ Path.GetFileName(file) }\"; filename=\"{Path.GetFileName(file)}\"\r\n" +
// "Content-Type: application/octet-stream\r\n\r\n");
// writer.Flush();
// using (var fileStream = File.OpenRead(file))
// fileStream.CopyTo(stream);
// }
// writer.Write($"\r\n--{boundary}--\r\n");
// bytes = stream.ToArray();
//}
//using (Stream postStream = request.GetRequestStream())
//{
// using (var zipStream = new GZipStream(postStream, CompressionMode.Compress))
// {
// zipStream.Write(bytes, 0, bytes.Length);
// }
//}
using (var requestStream = request.GetRequestStream())
using (var writer = new StreamWriter(requestStream))
{
foreach (var ddd in values)
{
writer.Write( // put all POST data into request
$"\r\n--{boundary}\r\nContent-Disposition: " +
$"form-data; name=\"{ ddd.Key }\"\r\n\r\n{ ddd.Value }");
}
foreach (var file in files)
{
//writer.Write( // file header
// $"\r\n--{boundary}\r\nContent-Disposition: " +
// $"form-data; name=\"{ Path.GetFileName(file) }\"; filename=\"{Path.GetFileName(file)}\"\r\n" +
// "Content-Type: application/octet-stream\r\n\r\n");
//writer.Flush();
//using (var fileStream = File.OpenRead(file))
// fileStream.CopyTo(requestStream);
writer.Write( // file header
$"\r\n--{boundary}\r\nContent-Disposition: " +
$"form-data; name=\"{ file.Key }\"; filename=\"{ file.Key }\"\r\n" +
"Content-Type: application/octet-stream\r\n\r\n");
writer.Flush();
//using (var fileStream = File.OpenRead(file))
file.Value.CopyTo(requestStream);
}
writer.Write($"\r\n--{boundary}--\r\n");
}
using (var response = (HttpWebResponse)request.GetResponse())
using (var responseStream = response.GetResponseStream())
{
if (responseStream == null)
return string.Empty;
using (var reader = new StreamReader(responseStream))
return reader.ReadToEnd();
}
}
private string GetMimeType(string extension)
{
if (extension.Contains(".txt"))
{
return "text/plain";
}
if (extension.Contains(".png"))
{
return "image/png";
}
return "application/octet-stream";
}
//protected async Task<string> PostUrlAsync(string url, string data)
//{
// StringContent stringContent;
// if (data != null)
// {
// stringContent = new StringContent(data, Encoding.UTF8, "application/json");
// }
// else
// {
// stringContent = new StringContent("", Encoding.UTF8);
// }
// var response = await httpClient.PostAsync(url, stringContent).ConfigureAwait(false);
// var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
// return result;
//}
protected async Task<string> PostAsync(string url, object data)
{
StringContent stringContent;
if (data != null)
{
stringContent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
}
else
{
stringContent = new StringContent("", Encoding.UTF8);
}
AddLanguage();
var response = await httpClient.PostAsync(ConfigHelper.Host + url, stringContent).ConfigureAwait(false);
var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
return result;
}
protected async Task<T> PostAsync<T>(string url, object data)
{
//var result = await Task.Factory.StartNew(() =>
//{
// return Post(url, data);
//});
//new EasyHttp.Http.HttpResponse().Cookies
//return result;
StringContent stringContent;
if (data != null)
{
var str = JsonConvert.SerializeObject(data);
stringContent = new StringContent(str, Encoding.UTF8, "application/json");
}
else
{
stringContent = new StringContent("", Encoding.UTF8);
}
AddLanguage();
var response = await httpClient.PostAsync(ConfigHelper.Host + url, stringContent).ConfigureAwait(false);
//var cookies = response.Headers.GetValues("Set-Cookie");
//if (cookies.Any())
//{
// foreach (var cookie in cookies)
// {
// ApiBase.cookies.Add(cookie)
// }
//}
var info = await ParseJsonAsync<T>(response);
return info;
}
//private static HttpRequestMessage CreateRequest(string url, System.Net.Http.HttpMethod method)
//{
// HttpRequestMessage httpRequestMessage1 = new HttpRequestMessage();
// httpRequestMessage1.Method = method;
// Uri uri = new Uri(ConfigHelper.Host + url);
// httpRequestMessage1.RequestUri = uri;
// HttpRequestMessage httpRequestMessage2 = httpRequestMessage1;
// //if (requiresAuthentication)
// // httpRequestMessage2.Headers.Authorization = this._authorization;
// return httpRequestMessage2;
//}
private void AddLanguage()
{
httpClient.DefaultRequestHeaders.Remove("Language");
//httpClient.DefaultRequestHeaders.Add("Language", PubCommData.Lauguage);
}
/// <summary>
/// 因为cef调用c#代码,异步请求在win7上会有问题,所以写了同步的方法
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public string Get(string url)
{
var url1 = url;
if (url1.IndexOf("http") == -1)
{
url1 = ConfigHelper.Host + url1;
}
//AddLanguage();
var request = (HttpWebRequest)WebRequest.Create(url1);
request.Method = "GET";
//foreach (var item in httpClient.DefaultRequestHeaders)
//{
// request.Headers.Add(item.Key, item.Value.First());
//}
request.UserAgent = httpClient.DefaultRequestHeaders.UserAgent.ToString();
request.Accept = "application/json";
request.Headers.Add("Language", "Zh-cn");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.CookieContainer = new CookieContainer();
foreach (Cookie item in cookies)
{
request.CookieContainer.Add(item);
}
var res = request.GetResponse();
using (var stream = new StreamReader(res.GetResponseStream()))
{
return stream.ReadToEnd();
}
}
public T Get<T>(string url)
{
var res = Get(url);
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(res);
}
/// <summary>
/// 因为cef调用c#代码,异步请求在win7上会有问题,所以写了同步的方法
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <returns></returns>
public string Post(string url, object data)
{
var request = (HttpWebRequest)WebRequest.Create(ConfigHelper.Host + url);
request.Method = "POST";
request.UserAgent = httpClient.DefaultRequestHeaders.UserAgent.ToString();
request.Accept = "application/json";
request.Headers.Add("Language", "Zh-cn");
request.CookieContainer = new CookieContainer();
foreach (Cookie item in cookies)
{
request.CookieContainer.Add(item);
}
request.ContentType = "application/json";
if (data != null)
{
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(Newtonsoft.Json.JsonConvert.SerializeObject(data));
}
}
else
{
request.ContentLength = 0;
}
var res = request.GetResponse();
using (var stream = new StreamReader(res.GetResponseStream()))
{
return stream.ReadToEnd();
}
}
public T Post<T>(string url, object data)
{
return JsonConvert.DeserializeObject<T>(Post(url, data));
}
protected byte[] GetBytes(string url)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream netStream = response.GetResponseStream())
{
var data = ((MemoryStream)netStream).ToArray();
return data;
}
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 852043d14fe11e044bd628892492efce
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+22
View File
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis
{
public class JsonResult
{
public bool result { get; set; }
//public dynamic data { get; set; }
public string errMsg { get; set; }
}
public class JsonResult<T> : JsonResult
{
//public bool result { get; set; }
public T data { get; set; }
//public string errMsg { get; set; }
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2d782ebdf1197264fbb7df630c9ec289
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+74
View File
@@ -0,0 +1,74 @@
using Assets.Scripts.Apis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis
{
public class MapApi :ApiBase
{
public string GetMapToken(string name)
{
return Get($"Map/GetMapToken?name={name}");
}
/// <summary>
/// 获取路线数据
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public MapDataModel GetData(int id)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<MapDataModel>(Get("Map/GetData?routeId="+id));
}
/// <summary>
/// 从服务端获取记录信息
/// </summary>
/// <returns></returns>
public List<MapRecordRanking> GetRecordFileFromServer(List<string> id)
{
return Post<JsonResult<List<MapRecordRanking>>>("Map/GetCyclingRecordsById", id).data;
}
/// <summary>
/// 通过Id获取路书
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public JsonResult<MapRoute> GetById(int id)
{
return Get<JsonResult<MapRoute>>($"Map/GetMapRouteById?id={id}");
}
/// <summary>
///
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="name">名称,地址,编号</param>
/// <param name="distance">距离,格式0-10</param>
/// <param name="is3D"></param>
/// <param name="sort">hot, distance</param>
/// <param name="sortDire">asc</param>
/// <returns></returns>
public JsonResult<List<MapRoute>> GetList(int pageIndex, int pageSize, string name, string distance="", string hands="", bool is3D=false, string sort="", string sortDire = "")
{
var url = $"Map/GetRoute?pageIndex={ pageIndex }&pageSize={ pageSize }&name={ name }&distance={ distance }&hands={ hands }&is3D={ is3D }&sort={ sort }&sortDire={ sortDire }";
return Get<JsonResult<List<MapRoute>>>(url);
}
/// <summary>
/// 从服务端获取Key
/// </summary>
/// <returns></returns>
public Dictionary<string, string> GetServiceKeyFromServer()
{
return Get<JsonResult<Dictionary<string, string>>>($"Map/GetServiceKey").data;
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: efd73e0e9fe10314e8fbfa123aa6d210
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
using Assets.Scripts.Apis.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis
{
public class MapInterruptRecordApi:ApiBase
{
/// <summary>
/// 上传骑行记录到服务端
/// </summary>
/// <param name="interruptRecord"></param>
public JsonResult<AddMapRecordResultModel> Add(MapInterruptRecord interruptRecord, List<string> fileNames)
{
var result = Upload("MapRecord/AddMapInterruptRecord", interruptRecord, fileNames);
var jsonResult = JsonConvert.DeserializeObject<JsonResult<AddMapRecordResultModel>>(result);
return jsonResult;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a19da168ad334a54abc24f4eb95751e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 92062add3e1975c46bbf4d70543955a7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class AddMapRecordResultModel
{
public int RankingId { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e10150ebcdd04eb4588cc8cd22385286
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+147
View File
@@ -0,0 +1,147 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class MapDataModel
{
public string Type { get; set; }
public double TotalDistance { get; set; }
//private double? _TotalClimb;
///// <summary>
///// 累计爬升
///// </summary>
//public double TotalClimb
//{
// get
// {
// if(_TotalClimb == null)
// {
// var total = 0D;
// for (int i = 0; i < List.Count; i++)
// {
// if(i < List.Count - 1)
// {
// var item = List[i];
// var next = List[i + 1];
// var value = next.Elevation - item.Elevation;
// if(value > 0)
// {
// total += value;
// }
// }
// }
// _TotalClimb = total;
// }
// return _TotalClimb.GetValueOrDefault(0);
// }
//}
//public double AverageGrade
//{
// get
// {
// }
//}
private List<Item> _List;
public List<Item> List
{
get
{
return _List;
}
set
{
_List = value;
if (_List == null) return;
this.CalcDistance();
this.CalcGrade();
}
}
private void CalcDistance()
{
//TODO:需要加上turfHelper
//for (int i = 0; i < _List.Count - 1; i++)
//{
// var value = TurfHelper.GetDistances(new double[] { _List[i].Point[1], _List[i].Point[0] }, new double[] { _List[i + 1].Point[1], _List[i + 1].Point[0] });
// _List[i].Distance = value;
//}
}
/// <summary>
/// 计算坡度数据
/// </summary>
private void CalcGrade()
{
for (int i = 0; i < this._List.Count - 1; i++)
{
var a = _List[i + 1].Elevation - _List[i].Elevation;
if (a == 0)
{
//grade.Add(0);
_List[i].Grade = 0;
continue;
}
//勾股定理
var c = _List[i].Distance;//如果车停了下来,c为0
//如果当前点到下一个点的距离是0,并且不是第一条记录,则坡度用上一个点的坡度
if (c == 0 && i > 0)
{
_List[i].Grade = _List[i - 1].Grade;
continue;
}
var b = Math.Sqrt(c * c - a * a);
if (double.IsNaN(b))
{
_List[i].Grade = 0;
}
else if (b == 0)//如果b等于,这就是垂直的墙壁
{
_List[i].Grade = _List[i - 1].Grade;
}
else
{
_List[i].Grade = Math.Round(a / b * 100, 4);
}
}
}
public MapDataModel()
{
//List = new List<Item>();
}
public class Item
{
/// <summary>
/// 坐标(lat,lon)
/// </summary>
public double[] Point { get; set; }
/// <summary>
/// 距离(单位米)
/// </summary>
public double Distance { get; set; }
/// <summary>
/// 海拔
/// </summary>
public double Elevation { get; set; }
public double Grade { get; set; }
}
public override string ToString()
{
//return base.ToString();
return Newtonsoft.Json.JsonConvert.SerializeObject(this);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6894ce41336dd9f488f53bbe4ded61f4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class MapInterruptRecord
{
public string Id { get; set; }
public int RouteId { get; set; }
public string RouteUrl { get; set; }
public double EndDistance { get; set; }
public string RouteImage { get; set; }
public string RecordFileName { get; set; }
public string RouteName { get; set; }
public DateTime CreateTime { get; set; }
public bool IsCompleted { get; set; }
public string ElevationUrl { get; set; }
public double TotalDistance { get; set; }
public int UserId { get; set; }
public int? Ftp { get; set; }
public double? IF { get; set; }
public double? Kj { get; set; }
public double? Tss { get; set; }
public double? NormalizedPower { get; set; }
public double? AveragePower { get; set; }
public double? MaxPower { get; set; }
public int Ticks { get; set; }
public string TrainingTime { get; set; }
/// <summary>
/// 功率体重比
/// </summary>
public double? WeightKg { get; set; }
/// <summary>
/// 车重
/// </summary>
public double BicycleWeight { get; set; }
public double Weight { get; set; }
public double? AverageCadence { get; set; }
public double? MaxCadence { get; set; }
public double? AverageHeartRate { get; set; }
public double? MaxHeartRate { get; set; }
/// <summary>
/// 用户实际骑的距离和总线路长度的比
/// </summary>
public double? Progress { get; set; }
public string SpeedRange { get; set; }
public string ContinueMark { get; set; }
public int? ContinueIndex { get; set; }
public bool IsDelete { get; set; }
public int MapCompetitionId { get; set; }
public string ManufacturerName { get; set; }
public string DeviceNumber { get; set; }
public bool IsRanking { get; set; }
public double CurrentRouteStartDistance { get; set; }
public int? ManufacturerId { get; set; }
public int? AntModelId { get; set; }
public DateTime StartTime { get; set; }
/// <summary>
/// 骑行模式
/// </summary>
public string Mode { get; set; }
/// <summary>
/// 骑行模式的参数
/// </summary>
public string Param { get; set; }
public int GlobalCyclingId { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 35f4d405c5be4b74a913ae454acaae42
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class MapRecordRanking
{
public int UserId { get; set; }
public string RecordFileName { get; set; }
public int RouteId { get; set; }
public int Ticks { get; set; }
public Guid Id { get; set; }
public string[] record { get; set; }
public string WxHeadImg { get; set; }
public string NickName { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 43f7b75b9a3b54845bfcfe10bc670621
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+104
View File
@@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class MapRoute
{
public int Id { get; set; }
/// <summary>
/// 路线名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 路线描述
/// </summary>
public string Dec { get; set; }
/// <summary>
/// 文件路径
/// </summary>
public string DirPath { get; set; }
/// <summary>
/// 路线区域
/// </summary>
public int Area { get; set; }
/// <summary>
/// 区域名称
/// </summary>
public string AreaName { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 是否删除:0未删除,1删除
/// </summary>
public bool? IsUsable { get; set; }
/// <summary>
/// 是否官方路书
/// </summary>
public bool? IsOfficial { get; set; }
/// <summary>
/// 路书的hash值,判断是否重复,得到byte[] hashcode必须传入
/// </summary>
public string Hash { get; set; }
/// <summary>
/// 路线长度
/// </summary>
public double Distance { get; set; }
/// <summary>
/// 最大高程落差
/// </summary>
public double EleDifference { get; set; }
/// <summary>
/// 落差长度
/// </summary>
public int GapLength { get; set; }
/// <summary>
/// 累计爬升
/// </summary>
public double? TotalClimb { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 状态(0未发布,1已发布)
/// </summary>
public int State { get; set; }
/// <summary>
/// 封面文件地址
/// </summary>
public string CoverImage { get; set; }
/// <summary>
/// 海拔数据
/// </summary>
public string ElevationPath { get; set; }
/// <summary>
/// 做为附近的人计算参数,不做数据存储
/// </summary>
public double? Near { get; set; }
/// <summary>
/// 创建人姓名
/// </summary>
public string NickName { get; set; }
public double[] Point { get; set; }
public string Address { get; set; }
public double AverageGrade { get; set; }
public bool IsFavorite { get; set; }
public bool Enable3D { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: be111aadd2f1b034a9eece75ae35b955
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class SummaryResultModel
{
public string NickName { get; set; }
public int Id { get; set; }
public string Phone { get; set; }
public string WxHeadImg { get; set; }
public int Ftp { get; set; }
public int Sex { get; set; }
public string CountryCode { get; set; }
public string CountryImg { get; set; }
public double TotalKj { get; set; }
public double MaxPower { get; set; }
public double MaxHeartRate { get; set; }
public double Weight { get; set; }
public double BicycleWeight { get; set; }
public int WheelDiameter { get; set; }
/// <summary>
/// 骑行次数
/// </summary>
public double Count { get; set; }
public double TotalDistance { get; set; }
public double TotalTicks { get; set; }
public string TotalClimb { get; set; }
public string Kcal { get; set; }
public double TwentyMinutesMaxAP { get; set; }
/// <summary>
/// 单次最高海拔提升
/// </summary>
public string SingleElevationIncrease { get; set; }
public double OneMinuteMaxAP { get; set; }
public double SingleMaxCyclingTime { get; set; }
public string MaxKcal { get; set; }
public double FiveMinutesMaxAp { get; set; }
public string SingleTripDistance { get; set; }
public double CompleteRoute { get; set; }
public string Tips { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5365c1dd3a8ce72429bf173971fa6597
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis.Models
{
public class UserResultModel
{
public int Id { get; set; }
public string Nickname { get; set; }
/// <summary>
/// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
/// </summary>
public int Sex { get; set; }
public int Unit { get; set; }
public double Weight { get; set; }
public int FTP { get; set; }
public int WheelDiameter { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Pass { get; set; }
public string OtherPlatforms { get; set; }
public string Country { get; set; }
public string Province { get; set; }
public string City { get; set; }
public string Area { get; set; }
public string WxHeadImg { get; set; }
public DateTime LastLoginTime { get; set; }
/// <summary>
/// 自动暂停
/// </summary>
public bool AutoPause { get; set; }
/// <summary>
/// 最大心率
/// </summary>
public int MaxHeartRate { get; set; }
public bool CanEditRoom { get; set; }
/// <summary>
/// 自行车重
/// </summary>
public double BicycleWeight { get; set; }
public string Contact { get; set; }
public string ContactPhone { get; set; }
public string ContactAddress { get; set; }
/// <summary>
/// 阻力灵敏度
/// </summary>
public int Sensitivity { get; set; }
/// <summary>
/// 已连接到Strava
/// </summary>
public bool ConnectedToStrava { get; set; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b02776a537d93a042bb09a7c0f7b4815
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+97
View File
@@ -0,0 +1,97 @@
using Assets.Scripts.Apis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Apis
{
public class UserApi : ApiBase
{
public async Task<JsonResult<UserResultModel>> Login(string phone, string pwd, string countryCode)
{
var param = new
{
Phone = phone,
Pwd = pwd,
countryCode
};
JsonResult<UserResultModel> ret = null;
try
{
ret = await PostAsync<JsonResult<UserResultModel>>("NoAuth/v1/Login", param);
}
catch (Exception ex)
{
return new JsonResult<UserResultModel> { result = false, errMsg = ex.Message };
}
//ApiBase.cookies = response.Cookies;
//var ret = response.DynamicBody;
if (ret.result)
{
//var str = Newtonsoft.Json.JsonConvert.SerializeObject(ret.data);
var user = new UserResultModel();
user.Id = ret.data.Id;
user.Nickname = ret.data.Nickname;
user.Phone = ((string)ret.data.Phone).Trim();
user.Country = ret.data.Country;
user.Province = ret.data.Province;
user.City = ret.data.City;
user.Area = ret.data.Area;
user.Pass = ret.data.Pass;
user.Sex = ret.data.Sex;
user.Unit = ret.data.Unit;
user.Weight = ret.data.Weight;
user.FTP = ret.data.FTP;
user.WheelDiameter = ret.data.WheelDiameter;
user.Email = user.Email ?? "";
user.Pass = user.Pass ?? "";
user.OtherPlatforms = user.OtherPlatforms ?? "";
user.WxHeadImg = ret.data.WxHeadImg ?? "";
//user.LoginTime = ret.data.LoginTime;
user.LastLoginTime = ret.data.LastLoginTime;
user.AutoPause = ret.data.AutoPause;
user.MaxHeartRate = ret.data.MaxHeartRate;
user.CanEditRoom = ret.data.CanEditRoom;
user.BicycleWeight = ret.data.BicycleWeight;
user.Contact = ret.data.Contact;
user.ContactPhone = ret.data.ContactPhone;
user.ContactAddress = ret.data.ContactAddress;
user.Sensitivity = ret.data.Sensitivity;
if (ret.data.ConnectedToStrava != null)
{
user.ConnectedToStrava = ret.data.ConnectedToStrava;
}
//todo: check local database, insert new user
//PubCommData.CurrentUser = user;
return new JsonResult<UserResultModel>() { result = true, data = user };
}
else
{
return new JsonResult<UserResultModel>() { result = false, data = null, errMsg = ret.errMsg };
}
}
/// <summary>
/// 获取个人中心的统计信息
/// </summary>
/// <returns></returns>
public JsonResult<SummaryResultModel> GetSummary()
{
var result = Get<JsonResult<SummaryResultModel>>("User/GetSummary");
return result;
}
public DateTime GetNow()
{
var result = Get("NoAuth/GetNow");
return DateTime.Parse(result);
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5125f13b6b78d534bada8457fa9c2413
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+15
View File
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts
{
public class ConfigHelper
{
public static string Host = "http://192.168.0.97:5082/";
public static string AppVersion = "1.0.0";
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 021b5a61b832e5543b09fc9b06da54a6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: