85 lines
2.8 KiB
C#
85 lines
2.8 KiB
C#
using DotNetty.Buffers;
|
|
using DotNetty.Transport.Channels;
|
|
using JSMachine.WMS.Infrastructure.Helper;
|
|
using JSMachine.WMS.Netty.Common.Model;
|
|
using JSMachine.WMS.Netty.Common.Util;
|
|
using JSMachine.WMS.Netty.NettyAsClient.Command;
|
|
using JSMachine.WMS.Netty.NettyAsClient.CommandHandler;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.Composition;
|
|
using System.ComponentModel.Composition.Hosting;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace JSMachine.WMS.Netty.NettyAsClient.Transport
|
|
{
|
|
public class NettyClientTransport
|
|
{
|
|
private IChannelHandlerContext ChannelHandlerContext;
|
|
private IPInfo RemoteIpInfo;
|
|
private TcpEngineInitParam _tcpEngineInitParam;
|
|
|
|
[ImportMany("NettyAsClient")]
|
|
private List<BaseCmdhandler> AllCmds { get; set; }
|
|
|
|
private Lazy<CompositionContainer> _Container = new(() =>
|
|
{
|
|
AggregateCatalog catalog = new();
|
|
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
|
|
|
|
return new CompositionContainer(catalog);
|
|
});
|
|
|
|
public NettyClientTransport(IChannelHandlerContext channel, TcpEngineInitParam tcpEngineInitParam)
|
|
{
|
|
_tcpEngineInitParam= tcpEngineInitParam;
|
|
|
|
_Container.Value.ComposeParts(this);
|
|
|
|
ChannelHandlerContext = channel;
|
|
|
|
foreach (BaseCmdhandler cmd in AllCmds)
|
|
{
|
|
cmd.Channel = channel;
|
|
}
|
|
|
|
RemoteIpInfo = channel.ToIPInfo(AddressOnwer.Remote);
|
|
}
|
|
|
|
public Task ChannelReadHandle(IByteBuffer byteBuffer)
|
|
{
|
|
string msg = byteBuffer.ToString(Encoding.UTF8);
|
|
|
|
//int length = byteBuffer.ReadableBytes;
|
|
//byte[] array = new byte[length];
|
|
//byteBuffer.GetBytes(byteBuffer.ReaderIndex, array);
|
|
|
|
//string msg = Encoding.UTF8.GetString(array);
|
|
|
|
return Task.Run(async () =>
|
|
{
|
|
foreach (BaseCmdhandler cmd in AllCmds)
|
|
{
|
|
BaseCmd baseCmd;
|
|
if (msg.Length < _tcpEngineInitParam.MinCodeLength)
|
|
baseCmd = new BarCodeReadExceptionCmd() { Msg = msg };
|
|
else
|
|
{
|
|
if (_tcpEngineInitParam.DeviceType != DeviceType.PenmoPrint)
|
|
baseCmd = new BarCodeUploadCmd() { Msg = msg };
|
|
else
|
|
baseCmd = new PenmoReadCmd() { Msg = msg };
|
|
//baseCmd = new BarCodeUploadCmd() { Msg = msg };
|
|
}
|
|
bool isMsgHasBeenHandled = await cmd.Handle(baseCmd);
|
|
if (isMsgHasBeenHandled)
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|