Quellcode durchsuchen

增加协调中心的控制器

master
SmallChi(Koike) vor 4 Jahren
Ursprung
Commit
a652c3182c
8 geänderte Dateien mit 181 neuen und 19 gelöschten Zeilen
  1. +57
    -0
      src/JT1078.Gateway.Coordinator/Controller/CoordinatorController.cs
  2. +31
    -0
      src/JT1078.Gateway.Coordinator/Controller/UserController.cs
  3. +19
    -0
      src/JT1078.Gateway.Coordinator/Dtos/ChannelCloseRequest.cs
  4. +18
    -0
      src/JT1078.Gateway.Coordinator/Dtos/HeartbeatRequest.cs
  5. +13
    -0
      src/JT1078.Gateway.Coordinator/Dtos/LoginRequest.cs
  6. +13
    -14
      src/JT1078.Gateway.Coordinator/Program.cs
  7. +9
    -1
      src/JT1078.Gateway/Configurations/JT1078Configuration.cs
  8. +21
    -4
      src/JT1078.Gateway/JT1078CoordinatorHttpClient.cs

+ 57
- 0
src/JT1078.Gateway.Coordinator/Controller/CoordinatorController.cs Datei anzeigen

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using JT1078.Gateway.Coordinator.Dtos;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace JT1078.Gateway.Coordinator.Controller
{
/// <summary>
/// 协调器中心
/// </summary>
[Route("JT1078WebApi/Coordinator")]
[ApiController]
[EnableCors("any")]
public class CoordinatorController:ControllerBase
{
private ILogger logger;
public CoordinatorController(ILoggerFactory loggerFactory)
{
logger = loggerFactory.CreateLogger<CoordinatorController>();
}

/// <summary>
/// 集群服务器重置
/// </summary>
[Route("Reset")]
[HttpPost]
public void Reset()
{

}

/// <summary>
/// 心跳检测
/// </summary>
[Route("Heartbeat")]
[HttpPost]
public void Heartbeat([FromBody] HeartbeatRequest request)
{
}
/// <summary>
/// 关闭通道
/// </summary>
[Route("ChannelClose")]
[HttpPost]
public void ChannelClose([FromBody] ChannelCloseRequest request)
{

}
}
}

+ 31
- 0
src/JT1078.Gateway.Coordinator/Controller/UserController.cs Datei anzeigen

@@ -0,0 +1,31 @@
using JT1078.Gateway.Coordinator.Dtos;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace JT1078.Gateway.Coordinator.Controller
{
/// <summary>
/// 用户功能
/// </summary>
[Route("JT1078WebApi/User")]
[ApiController]
[EnableCors("any")]
public class UserController : ControllerBase
{


/// <summary>
/// 登录
/// </summary>
[Route("Login")]
[HttpPost]
public void Login([FromBody] LoginRequest request)
{

}
}
}

+ 19
- 0
src/JT1078.Gateway.Coordinator/Dtos/ChannelCloseRequest.cs Datei anzeigen

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace JT1078.Gateway.Coordinator.Dtos
{
public class ChannelCloseRequest
{
/// <summary>
/// 设备sim卡号
/// </summary>
public string TerminalPhoneNo { get; set; }
/// <summary>
/// 通道号
/// </summary>
public int ChannelNo { get; set; }
}
}

+ 18
- 0
src/JT1078.Gateway.Coordinator/Dtos/HeartbeatRequest.cs Datei anzeigen

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace JT1078.Gateway.Coordinator.Dtos
{
public class HeartbeatRequest
{
public int HttpPort { get; set; }
public int TcpPort { get; set; }
public int UdpPort { get; set; }
public int TcpSessionCount { get; set; }
public int UdpSessionCount { get; set; }
public int HttpSessionCount { get; set; }
public int WebSocketSessionCount { get; set; }
}
}

+ 13
- 0
src/JT1078.Gateway.Coordinator/Dtos/LoginRequest.cs Datei anzeigen

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace JT1078.Gateway.Coordinator.Dtos
{
public class LoginRequest
{
public string UserName { get; set; }
public string Password { get; set; }
}
}

+ 13
- 14
src/JT1078.Gateway.Coordinator/Program.cs Datei anzeigen

@@ -20,7 +20,18 @@ namespace JT1078.Gateway.Coordinator
.UseEnvironment(args[0])
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.Configure(app =>
webBuilder.ConfigureServices(services =>
{
services.AddCors(options =>
options.AddPolicy("any", builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(o=>true)));
services.AddMemoryCache();
services.AddControllers();
services.AddMvc();
}).Configure(app =>
{
app.UseRouting();
app.UseCors("any");
@@ -32,19 +43,6 @@ namespace JT1078.Gateway.Coordinator
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost
});
})
.ConfigureServices(services =>
{
services.AddCors(options =>
options.AddPolicy("any", builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin()
.SetIsOriginAllowed(o=>true)));
services.AddMemoryCache();
services.AddControllers();
services.AddMvc();
});
})
.ConfigureAppConfiguration((hostingContext, config) =>
@@ -57,6 +55,7 @@ namespace JT1078.Gateway.Coordinator
{
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
})
.Build()
.Run();


+ 9
- 1
src/JT1078.Gateway/Configurations/JT1078Configuration.cs Datei anzeigen

@@ -43,7 +43,15 @@ namespace JT1078.Gateway.Configurations
/// http://localhost/
/// http://127.0.0.1/
/// </summary>
public string CoordinatorUri { get; set; } = "http://localhost:1080/";
public string CoordinatorUri { get; set; } = "http://localhost:1080/";
/// <summary>
/// 协调器Coordinator主机登录账号
/// </summary>
public string CoordinatorUserName { get; set; } = "admin";
/// <summary>
/// 协调器Coordinator主机登录密码
/// </summary>
public string CoordinatorPassword { get; set; } = "123456";
public JT1078Configuration Value => this;
}
}

+ 21
- 4
src/JT1078.Gateway/JT1078CoordinatorHttpClient.cs Datei anzeigen

@@ -25,6 +25,23 @@ namespace JT1078.Gateway
this.httpClient = new HttpClient();
this.httpClient.BaseAddress = new Uri(Configuration.CoordinatorUri);
this.httpClient.Timeout = TimeSpan.FromSeconds(3);
Login().GetAwaiter().GetResult();
}

/// <summary>
/// 登录
/// </summary>
public async ValueTask Login()
{
string json = $"{{\"UserName\":\"{Configuration.CoordinatorUserName}\",\"Password\":\"{Configuration.CoordinatorPassword}\"}}";
var response = await httpClient.PostAsync($"{endpoint}/User/Login", new StringContent(json));
response.EnsureSuccessStatusCode();
var token = await response.Content.ReadAsStringAsync();
if (string.IsNullOrEmpty(token))
{
throw new NullReferenceException("token is null");
}
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
}

/// <summary>
@@ -32,7 +49,7 @@ namespace JT1078.Gateway
/// </summary>
public async ValueTask Reset()
{
await httpClient.GetAsync($"{endpoint}/reset");
await httpClient.PostAsync($"{endpoint}/Coordinator/Reset", new StringContent(""));
}

/// <summary>
@@ -41,7 +58,7 @@ namespace JT1078.Gateway
/// <param name="content"></param>
public async ValueTask Heartbeat(string content)
{
await httpClient.PostAsync($"{endpoint}/heartbeat", new StringContent(content));
await httpClient.PostAsync($"{endpoint}/Coordinator/Heartbeat", new StringContent(content));
}

/// <summary>
@@ -49,11 +66,11 @@ namespace JT1078.Gateway
/// </summary>
/// <param name="terminalPhoneNo"></param>
/// <param name="channelNo"></param>
public async ValueTask ChannelClose(string terminalPhoneNo,int channelNo)
public async ValueTask ChannelClose(string terminalPhoneNo, int channelNo)
{
//todo:通过自维护,当协调重启导致集群内网关未关闭的情况下,通过轮询的方式再去调用
string json = $"{{\"TerminalPhoneNo\":\"{terminalPhoneNo}\",\"ChannelNo\":\"{channelNo}\"}}";
await httpClient.PostAsync($"{endpoint}/ChannelClose", new StringContent(json));
await httpClient.PostAsync($"{endpoint}/Coordinator/ChannelClose", new StringContent(json));
}
}
}

Laden…
Abbrechen
Speichern