添加nuget和网络请求api

This commit is contained in:
suntao 2021-03-22 16:05:40 +08:00
parent f8bcfd977f
commit f557e2f5df
45 changed files with 1682 additions and 299 deletions

2
.gitignore vendored
View File

@ -69,3 +69,5 @@ crashlytics-build.properties
# Temporary auto-generated Android Assets
/[Aa]ssets/[Ss]treamingAssets/aa.meta
/[Aa]ssets/[Ss]treamingAssets/aa/*
Assets/Packages
Assets/Packages.meta

15
Assets/NuGet.config Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear/>
<add key="NuGet" value="http://www.nuget.org/api/v2/" />
</packageSources>
<disabledPackageSources />
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
<config>
<add key="repositoryPath" value="./Packages" />
<add key="DefaultPushSource" value="http://www.nuget.org/api/v2/" />
</config>
</configuration>

32
Assets/NuGet.config.meta Normal file
View File

@ -0,0 +1,32 @@
fileFormatVersion: 2
guid: 36beb3506906c8048ad370241fcd0b87
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings: {}
userData:
assetBundleName:
assetBundleVariant:

9
Assets/NuGet.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 217cb7caed5f7fb49b339428b1d80974
folderAsset: yes
timeCreated: 1510280316
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/NuGet/Editor.meta Normal file
View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b3fad56c531ac5a4db190a745f589a8e
folderAsset: yes
timeCreated: 1510280304
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 8dc1be91775c4bb469f6b74cef450eaa
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 1
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

21
Assets/NuGet/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Patrick McCarthy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1d9014b99ad06af428514a5902d29ff3
timeCreated: 1573248500
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/NuGet/README.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 83c5d2001771f15429a88d67e81366d6
timeCreated: 1517876157
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 1738075a39a390447b7a620ca6962142
folderAsset: yes
timeCreated: 1510280362
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,88 @@
fileFormatVersion: 2
guid: eec19781926cd2248b7c9abfde8db555
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 215e43cda847e6d44af8b40376eeed8a
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,298 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 705507994}
m_IndirectSpecularColor: {r: 0.44657826, g: 0.49641263, b: 0.57481676, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 705507995}
- component: {fileID: 705507994}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &705507994
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &705507995
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &963194225
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 963194228}
- component: {fileID: 963194227}
- component: {fileID: 963194226}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &963194226
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
--- !u!20 &963194227
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &963194228
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -1,5 +1,6 @@
fileFormatVersion: 2
guid: 9fc0d4010bbf28b4594072e72b8655ab
guid: c3657715ecf71dd4ca94ba58d3468e81
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:

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;
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 852043d14fe11e044bd628892492efce
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2d782ebdf1197264fbb7df630c9ec289
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: efd73e0e9fe10314e8fbfa123aa6d210
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a19da168ad334a54abc24f4eb95751e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 92062add3e1975c46bbf4d70543955a7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e10150ebcdd04eb4588cc8cd22385286
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6894ce41336dd9f488f53bbe4ded61f4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 35f4d405c5be4b74a913ae454acaae42
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 43f7b75b9a3b54845bfcfe10bc670621
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: be111aadd2f1b034a9eece75ae35b955
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5365c1dd3a8ce72429bf173971fa6597
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b02776a537d93a042bb09a7c0f7b4815
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5125f13b6b78d534bada8457fa9c2413
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

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";
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 021b5a61b832e5543b09fc9b06da54a6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

4
Assets/packages.config Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="12.0.3" />
</packages>

View File

@ -0,0 +1,32 @@
fileFormatVersion: 2
guid: 0564d4e30aa722a499a256f4aa9eab96
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings: {}
userData:
assetBundleName:
assetBundleVariant: