mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-02-06 15:04:58 +00:00
commit
da08bb7bb9
|
@ -9,6 +9,7 @@ using System.ServiceProcess;
|
||||||
using Grpc.Net.Client;
|
using Grpc.Net.Client;
|
||||||
using Grpc.Net.Client.Web;
|
using Grpc.Net.Client.Web;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace WelsonJS.Service
|
namespace WelsonJS.Service
|
||||||
{
|
{
|
||||||
|
@ -54,47 +55,77 @@ namespace WelsonJS.Service
|
||||||
|
|
||||||
public async Task StartHeartbeatAsync()
|
public async Task StartHeartbeatAsync()
|
||||||
{
|
{
|
||||||
var call = _client.CheckHeartbeat();
|
while (true)
|
||||||
try
|
|
||||||
{
|
{
|
||||||
while (true)
|
var call = _client.CheckHeartbeat();
|
||||||
|
try
|
||||||
{
|
{
|
||||||
var request = new HeartbeatRequest {
|
|
||||||
|
var request = new HeartbeatRequest
|
||||||
|
{
|
||||||
IsAlive = true
|
IsAlive = true
|
||||||
};
|
};
|
||||||
|
|
||||||
await call.RequestStream.WriteAsync(request);
|
await call.RequestStream.WriteAsync(request);
|
||||||
|
await call.RequestStream.CompleteAsync();
|
||||||
_parent.Log("Sent heartbeat");
|
_parent.Log("Sent heartbeat");
|
||||||
|
|
||||||
if (await call.ResponseStream.MoveNext())
|
await Task.Delay(HeartbeatInterval); // HeartbeatInterval 동안 대기
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_parent.Log("Heartbeat request stream failed: " + ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 서버 응답을 수신하는 작업
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (await call.ResponseStream.MoveNext())
|
||||||
{
|
{
|
||||||
var response = call.ResponseStream.Current;
|
var response = call.ResponseStream.Current;
|
||||||
_parent.Log("Heartbeat response received: " + response.IsAlive);
|
_parent.Log("Heartbeat response received: " + response.IsAlive);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.Delay(HeartbeatInterval);
|
|
||||||
}
|
}
|
||||||
}
|
catch (RpcException ex)
|
||||||
finally
|
{
|
||||||
{
|
_parent.Log($"gRPC error: {ex.Status.Detail}");
|
||||||
await call.RequestStream.CompleteAsync();
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_parent.Log($"Unexpected error: {ex.Message}");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// 잠시 대기 후 재연결
|
||||||
|
await Task.Delay(TimeSpan.FromMilliseconds(HeartbeatInterval));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task StartEventListenerAsync()
|
public async Task StartEventListenerAsync()
|
||||||
{
|
{
|
||||||
var eventRequest = new FetchEventsRequest {
|
var eventRequest = new FetchEventsRequest
|
||||||
|
{
|
||||||
ClientId = clientId
|
ClientId = clientId
|
||||||
};
|
};
|
||||||
var eventCall = _client.FetchPendingEvents(eventRequest);
|
while (true)
|
||||||
try
|
|
||||||
{
|
{
|
||||||
while (await eventCall.ResponseStream.MoveNext())
|
var eventCall = _client.FetchPendingEvents(eventRequest);
|
||||||
|
try
|
||||||
{
|
{
|
||||||
var response = eventCall.ResponseStream.Current;
|
while (await eventCall.ResponseStream.MoveNext())
|
||||||
_parent.Log($"Received event from server: {response.EventType} with args: {string.Join(", ", response.Args)}");
|
{
|
||||||
|
var response = eventCall.ResponseStream.Current;
|
||||||
|
_parent.Log($"Received event from server: {response.EventType} with args: {string.Join(", ", response.Args)}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
await Task.Delay(TimeSpan.FromMilliseconds(HeartbeatInterval));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ShutdownAsync()
|
public async Task ShutdownAsync()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user