mirror of https://github.com/ogoun/Zero.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.1 KiB
104 lines
3.1 KiB
using System;
|
|
using System.Net;
|
|
using ZeroLevel.Models;
|
|
|
|
namespace ZeroLevel.Network
|
|
{
|
|
internal sealed class FrameExchange
|
|
: IDisposable
|
|
{
|
|
private IZTransport _current;
|
|
public IPEndPoint Endpoint => _current?.Endpoint;
|
|
public bool IsConnected => _current?.Status == ZTransportStatus.Working;
|
|
|
|
public FrameExchange(IZTransport transport)
|
|
{
|
|
_current = transport ?? throw new ArgumentNullException(nameof(transport));
|
|
}
|
|
|
|
public InvokeResult Send<T>(string inbox, T obj)
|
|
{
|
|
try
|
|
{
|
|
var frame = FrameBuilder.BuildFrame(obj, inbox);
|
|
_current.Send(frame);
|
|
return InvokeResult.Succeeding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.SystemError(ex, "[FrameExchange] Fault send frame");
|
|
return InvokeResult.Fault(ex.Message);
|
|
}
|
|
}
|
|
|
|
public InvokeResult Send(string inbox)
|
|
{
|
|
try
|
|
{
|
|
var frame = FrameBuilder.BuildFrame(inbox);
|
|
_current.Send(frame);
|
|
return InvokeResult.Succeeding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.SystemError(ex, "[FrameExchange] Fault send frame");
|
|
return InvokeResult.Fault(ex.Message);
|
|
}
|
|
}
|
|
|
|
public InvokeResult Send(Frame frame)
|
|
{
|
|
try
|
|
{
|
|
_current.Send(frame);
|
|
return InvokeResult.Succeeding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.SystemError(ex, "[FrameExchange] Fault send frame");
|
|
return InvokeResult.Fault(ex.Message);
|
|
}
|
|
}
|
|
|
|
public InvokeResult Request<Treq, Tresp>(string inbox, Treq obj, Action<Tresp> callback, Action<string> fault = null)
|
|
{
|
|
try
|
|
{
|
|
var frame = FrameBuilder.BuildRequestFrame(obj, inbox);
|
|
_current.Request(frame, response_data =>
|
|
{
|
|
callback(response_data.Read<Tresp>());
|
|
}, fault);
|
|
return InvokeResult.Succeeding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.SystemError(ex, "[FrameExchange] Fault send frame");
|
|
return InvokeResult.Fault(ex.Message);
|
|
}
|
|
}
|
|
|
|
public InvokeResult Request<Tresp>(string inbox, Action<Tresp> callback, Action<string> fault = null)
|
|
{
|
|
try
|
|
{
|
|
var frame = FrameBuilder.BuildRequestFrame(inbox);
|
|
_current.Request(frame, response_data =>
|
|
{
|
|
callback(response_data.Read<Tresp>());
|
|
}, fault);
|
|
return InvokeResult.Succeeding();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.SystemError(ex, "[FrameExchange] Fault send frame");
|
|
return InvokeResult.Fault(ex.Message);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_current?.Dispose();
|
|
}
|
|
}
|
|
} |