星尘服务端增加Discover服务接口
This commit is contained in:
parent
7d4e3b50df
commit
8c442e569c
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
// 真正的用户
|
||||
|
|
6
星尘.sln
6
星尘.sln
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue