星尘服务端增加Discover服务接口

This commit is contained in:
大石头 2019-05-26 18:12:27 +08:00
parent 7d4e3b50df
commit 8c442e569c
5 changed files with 95 additions and 53 deletions

View File

@ -2,6 +2,7 @@
using NewLife.Agent;
using NewLife.Log;
using NewLife.Net;
using NewLife.Remoting;
using NewLife.Threading;
using Stardust;
using System;
@ -87,48 +88,54 @@ namespace StarAgent
}
#region
private UdpServer _udp;
private ApiClient _udp;
private TimerX _udp_timer;
private void StartDiscover()
{
var udp = new UdpServer();
#if DEBUG
udp.Log = XTrace.Log;
udp.LogSend = true;
udp.LogReceive = true;
#endif
var tc = new ApiClient("udp://255.255.255.255:6666");
tc.Log = XTrace.Log;
tc.EncoderLog = XTrace.Log;
var ep = new IPEndPoint(IPAddress.Broadcast, 6666);
var session = udp.CreateSession(ep);
session.Received += OnDiscover;
tc.Open();
//session.Send("Hello");
// 定时广播
_udp_timer = new TimerX(s => (s as ISocketSession).Send("Hello"), session, 0, 5_000);
_udp_timer = new TimerX(OnDiscover, tc, 0, 5_000) { Async = true };
_udp = udp;
_udp = tc;
}
private void OnDiscover(Object sender, ReceivedEventArgs e)
private void OnDiscover(Object state)
{
var str = e.Packet?.ToStr();
WriteLog("收到[{0}]{1}", e.UserState, str);
//var udp = new UdpServer();
//udp.Log = XTrace.Log;
if (!str.IsNullOrEmpty())
{
var uri = new NetUri(str);
if (!uri.Host.IsNullOrEmpty() && uri.Port > 0)
{
WriteLog("发现服务器:{0}", uri);
//var ep = new IPEndPoint(IPAddress.Broadcast, 6666);
//var session = udp.CreateSession(ep);
//session.Send("Hello");
// 停止广播
_udp_timer.TryDispose();
_udp_timer = null;
var tc = state as ApiClient;
_udp.TryDispose();
_udp = null;
}
}
tc.InvokeOneWay("Discover");
//var str = e.Packet?.ToStr();
//WriteLog("收到[{0}]{1}", e.UserState, str);
//WriteLog("收到[{0}]{1}", tc, str);
//if (!str.IsNullOrEmpty())
//{
// var uri = new NetUri(str);
// if (!uri.Host.IsNullOrEmpty() && uri.Port > 0)
// {
// WriteLog("发现服务器:{0}", uri);
// // 停止广播
// _udp_timer.TryDispose();
// _udp_timer = null;
// _udp.TryDispose();
// _udp = null;
// }
//}
}
#endregion

View File

@ -0,0 +1,29 @@
using NewLife.Net;
using NewLife.Remoting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stardust.Server
{
[Api(null)]
class DiscoverService
{
public String Name { get; set; }
public NetUri Local { get; set; }
[Api(nameof(Discover))]
public Object Discover(String state)
{
return new
{
Name = Name,
Server = Local + "",
State = state,
};
}
}
}

View File

@ -1,18 +1,21 @@
using System;
using System.Net;
using NewLife;
using NewLife;
using NewLife.Agent;
using NewLife.Log;
using NewLife.Net;
using NewLife.Remoting;
using NewLife.Threading;
using Stardust.Data;
using System;
using System.Net;
namespace Stardust.Server
{
class Program
{
static void Main(String[] args) => new MyService().Main();
static void Main(String[] args)
{
new MyService().Main();
}
}
/// <summary>服务类。名字可以自定义</summary>
@ -25,21 +28,21 @@ namespace Stardust.Server
{
ServiceName = "Stardust";
var set = XCode.Setting.Current;
if (set.IsNew)
{
set.Debug = true;
set.ShowSQL = false;
set.TraceSQLTime = 3000;
set.SQLiteDbPath = @"..\Data";
set.SaveAsync();
}
ThreadPoolX.QueueUserWorkItem(() =>
{
var n = App.Meta.Count;
AppStat.Meta.Session.Dal.Db.ShowSQL = false;
var set2 = XCode.Setting.Current;
if (set2.IsNew)
{
set2.Debug = true;
set2.ShowSQL = false;
set2.TraceSQLTime = 3000;
set2.SQLiteDbPath = @"..\Data";
set2.Save();
}
});
// 注册菜单,在控制台菜单中按 t 可以执行Test函数主要用于临时处理数据
@ -69,11 +72,20 @@ namespace Stardust.Server
#endif
}
var local = new NetUri(NetType.Tcp, NetHelper.MyIP(), set.Port);
// 注册服务
sc.Register<StarService>();
var ds = new DiscoverService
{
Name = Environment.MachineName,
Local = local,
};
sc.Register(ds, null);
StarService.Log = XTrace.Log;
StarService.Local = new IPEndPoint(NetHelper.MyIP(), set.Port);
StarService.Local = local;
sc.Start();

View File

@ -16,7 +16,7 @@ namespace Stardust.Server
{
#region
/// <summary>本地节点</summary>
public static EndPoint Local { get; set; }
public static NetUri Local { get; set; }
#endregion
#region
@ -157,7 +157,7 @@ namespace Stardust.Server
// 服务器特性
pid = Process.GetCurrentProcess().Id;
online.Server = Local + "@" + pid;
online.Server = Local.EndPoint + "@" + pid;
online.Save();
// 真正的用户

View File

@ -20,8 +20,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "Test\Test.csproj",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stardust.Server", "Stardust.Server\Stardust.Server.csproj", "{73B28F07-E99F-45A8-B9A0-90E7BAC133A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stardust.ServerFx", "Stardust.ServerFx\Stardust.ServerFx.csproj", "{9A7251DD-7EE7-45C6-9EB6-F80789D3BCD7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StarAgent", "StarAgent\StarAgent.csproj", "{0FF65D90-214F-405E-9674-6C0992BC61FD}"
EndProject
Global
@ -54,10 +52,6 @@ Global
{73B28F07-E99F-45A8-B9A0-90E7BAC133A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73B28F07-E99F-45A8-B9A0-90E7BAC133A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73B28F07-E99F-45A8-B9A0-90E7BAC133A3}.Release|Any CPU.Build.0 = Release|Any CPU
{9A7251DD-7EE7-45C6-9EB6-F80789D3BCD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A7251DD-7EE7-45C6-9EB6-F80789D3BCD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A7251DD-7EE7-45C6-9EB6-F80789D3BCD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A7251DD-7EE7-45C6-9EB6-F80789D3BCD7}.Release|Any CPU.Build.0 = Release|Any CPU
{0FF65D90-214F-405E-9674-6C0992BC61FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FF65D90-214F-405E-9674-6C0992BC61FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FF65D90-214F-405E-9674-6C0992BC61FD}.Release|Any CPU.ActiveCfg = Release|Any CPU