[성현모] UniqueKeyApi Sokcet 완료
This commit is contained in:
@ -0,0 +1,27 @@
|
||||
namespace WebApi.Project.UniqueKeyApi.Socket.Packet
|
||||
{
|
||||
public enum EnumMessageId
|
||||
{
|
||||
//C2S : Client to Server
|
||||
//S2C : Server to Client
|
||||
|
||||
//unique key CRUD
|
||||
C2S_INSERT_UniqueKey = 10,
|
||||
S2C_INSERT_UniqueKey = 11,
|
||||
C2S_SELECT_UniqueKey = 12,
|
||||
S2C_SELECT_UniqueKey = 13,
|
||||
C2S_UPDATE_UniqueKey = 14,
|
||||
S2C_UPDATE_UniqueKey = 15,
|
||||
C2S_DELETE_UniqueKey = 16,
|
||||
S2C_DELETE_UniqueKey = 17,
|
||||
}
|
||||
|
||||
public enum EnumMessageResult
|
||||
{
|
||||
None = 0,
|
||||
|
||||
Success = 10,
|
||||
Failed = 10,
|
||||
Error = 11,
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,178 @@
|
||||
using System.Text;
|
||||
using SystemX.Core.Communication;
|
||||
using WebApi.Project.UniqueKeyApi.Models;
|
||||
using WebApi.Project.UniqueKeyApi.Socket.Object;
|
||||
using WebApi.Project.UniqueKeyApi.Socket.Session;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Socket.Packet
|
||||
{
|
||||
public class PacketHandler
|
||||
{
|
||||
public static async void C2S_INSERT_UniqueKeyHandler(PacketSession session, ArraySegment<byte> buffer)
|
||||
{
|
||||
var recvData = Encoding.UTF8.GetString(buffer);
|
||||
|
||||
//json으로 요청인지 확인
|
||||
bool isJsonRequest = true;
|
||||
|
||||
//convert to object
|
||||
var jsonObject = recvData.ToObject<C2S_INSERT_UniqueKey>();
|
||||
//json 요청 아닐때 변환
|
||||
if (jsonObject == null)
|
||||
{
|
||||
var recvDataList = recvData.Split(",");
|
||||
jsonObject = new C2S_INSERT_UniqueKey
|
||||
{
|
||||
Identity = recvDataList[0],
|
||||
Data1 = recvDataList[1],
|
||||
Data2 = recvDataList[2],
|
||||
Data3 = recvDataList[3],
|
||||
Data4 = recvDataList[4],
|
||||
Data5 = recvDataList[5],
|
||||
};
|
||||
isJsonRequest = false;
|
||||
}
|
||||
|
||||
string result = string.Empty;
|
||||
//insert DB
|
||||
if (jsonObject != null)
|
||||
{
|
||||
Request_InsertUniqueKey request = new Request_InsertUniqueKey();
|
||||
request.Identity = jsonObject.Identity;
|
||||
request.Data1 = jsonObject.Data1;
|
||||
request.Data2 = jsonObject.Data2;
|
||||
request.Data3 = jsonObject.Data3;
|
||||
request.Data4 = jsonObject.Data4;
|
||||
request.Data5 = jsonObject.Data5;
|
||||
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
SystemX.Core.Communication.Http http = new();
|
||||
var res = await http.PostJsonAsync<Request_InsertUniqueKey, Response_InsertUniqueKy>("https://127.0.0.1:9000/UniqueKey/InsertUniqueKey", request);
|
||||
result = res.ToJson();
|
||||
|
||||
//json 요청이 아니면 변환
|
||||
if (isJsonRequest == false)
|
||||
{
|
||||
if (res != null)
|
||||
result = $"{res.Identity},{res.Result}";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ClientSession clientSession = session as ClientSession;
|
||||
Client client = clientSession.Client;
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
client.Session.Send(Encoding.UTF8.GetBytes(result), EnumMessageId.S2C_INSERT_UniqueKey);
|
||||
}
|
||||
|
||||
public static async void C2S_SELECT_UniqueKeyHandler(PacketSession session, ArraySegment<byte> buffer)
|
||||
{
|
||||
var recvData = Encoding.UTF8.GetString(buffer);
|
||||
|
||||
//json으로 요청인지 확인
|
||||
bool isJsonRequest = true;
|
||||
|
||||
//convert to object
|
||||
var jsonObject = recvData.ToObject<C2S_SELECT_UniqueKey>();
|
||||
//json 요청 아닐때 변환
|
||||
if (jsonObject == null)
|
||||
{
|
||||
var recvDataList = recvData.Split(",");
|
||||
jsonObject = new C2S_SELECT_UniqueKey
|
||||
{
|
||||
Identity = recvDataList[0]
|
||||
};
|
||||
isJsonRequest = false;
|
||||
}
|
||||
|
||||
string result = string.Empty;
|
||||
//select DB
|
||||
if (jsonObject != null)
|
||||
{
|
||||
Request_SelectUniqueKey request = new Request_SelectUniqueKey();
|
||||
request.Identity = jsonObject.Identity;
|
||||
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
SystemX.Core.Communication.Http http = new();
|
||||
var res = await http.PostJsonAsync<Request_SelectUniqueKey, Response_SelectUniqueKy>("https://127.0.0.1:9000/UniqueKey/SelectUniqueKey", request);
|
||||
result = res.ToJson();
|
||||
|
||||
//json 요청이 아니면 변환
|
||||
if (isJsonRequest == false)
|
||||
{
|
||||
if (res != null)
|
||||
result = $"{res.Identity},{res.Data1},{res.Data2},{res.Data3},{res.Data4},{res.Data5}";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ClientSession clientSession = session as ClientSession;
|
||||
Client client = clientSession.Client;
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
client.Session.Send(Encoding.UTF8.GetBytes(result), EnumMessageId.S2C_SELECT_UniqueKey);
|
||||
}
|
||||
|
||||
public static async void C2S_UPDATE_UniqueKeyHandler(PacketSession session, ArraySegment<byte> buffer)
|
||||
{
|
||||
var recvData = Encoding.UTF8.GetString(buffer);
|
||||
|
||||
//json으로 요청인지 확인
|
||||
bool isJsonRequest = true;
|
||||
|
||||
//convert to object
|
||||
var jsonObject = recvData.ToObject<C2S_UPDATE_UniqueKey>();
|
||||
//json 요청 아닐때 변환
|
||||
if (jsonObject == null)
|
||||
{
|
||||
var recvDataList = recvData.Split(",");
|
||||
jsonObject = new C2S_UPDATE_UniqueKey
|
||||
{
|
||||
Identity = recvDataList[0],
|
||||
Data1 = recvDataList[1],
|
||||
Data2 = recvDataList[2],
|
||||
Data3 = recvDataList[3],
|
||||
Data4 = recvDataList[4],
|
||||
Data5 = recvDataList[5],
|
||||
};
|
||||
isJsonRequest = false;
|
||||
}
|
||||
|
||||
string result = string.Empty;
|
||||
//insert DB
|
||||
if (jsonObject != null)
|
||||
{
|
||||
Request_UpdateUniqueKey request = new Request_UpdateUniqueKey();
|
||||
request.Identity = jsonObject.Identity;
|
||||
request.Data1 = jsonObject.Data1;
|
||||
request.Data2 = jsonObject.Data2;
|
||||
request.Data3 = jsonObject.Data3;
|
||||
request.Data4 = jsonObject.Data4;
|
||||
request.Data5 = jsonObject.Data5;
|
||||
|
||||
SystemX.Core.Communication.Http http = new();
|
||||
var res = await http.PostJsonAsync<Request_UpdateUniqueKey, Response_UpdateUniqueKy>("https://127.0.0.1:9000/UniqueKey/UpdateUniqueKey", request);
|
||||
result = res.ToJson();
|
||||
|
||||
//json 요청이 아니면 변환
|
||||
if (isJsonRequest == false)
|
||||
{
|
||||
if (res != null)
|
||||
result = $"{res.Identity},{res.Result}";
|
||||
}
|
||||
}
|
||||
|
||||
ClientSession clientSession = session as ClientSession;
|
||||
Client client = clientSession.Client;
|
||||
if (client == null)
|
||||
return;
|
||||
|
||||
client.Session.Send(Encoding.UTF8.GetBytes(result), EnumMessageId.S2C_UPDATE_UniqueKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
using SystemX.Core.Communication;
|
||||
|
||||
namespace WebApi.Project.UniqueKeyApi.Socket.Packet
|
||||
{
|
||||
public class PacketManager
|
||||
{
|
||||
#region Singleton
|
||||
static PacketManager _instance = new PacketManager();
|
||||
public static PacketManager Instance { get { return _instance; } }
|
||||
#endregion
|
||||
|
||||
PacketManager()
|
||||
{
|
||||
Register();
|
||||
}
|
||||
|
||||
Dictionary<ushort, Action<PacketSession, ArraySegment<byte>, ushort>> _onRecv = new Dictionary<ushort, Action<PacketSession, ArraySegment<byte>, ushort>>();
|
||||
Dictionary<ushort, Action<PacketSession, ArraySegment<byte>>> _handler = new Dictionary<ushort, Action<PacketSession, ArraySegment<byte>>>();
|
||||
|
||||
public Action<PacketSession, ArraySegment<byte>, ushort> CustomHandler { get; set; }
|
||||
|
||||
public void Register()
|
||||
{
|
||||
_onRecv.Add((ushort)EnumMessageId.C2S_INSERT_UniqueKey, MakePacket<C2S_INSERT_UniqueKey>);
|
||||
_handler.Add((ushort)EnumMessageId.C2S_INSERT_UniqueKey, PacketHandler.C2S_INSERT_UniqueKeyHandler);
|
||||
|
||||
_onRecv.Add((ushort)EnumMessageId.C2S_SELECT_UniqueKey, MakePacket<C2S_SELECT_UniqueKey>);
|
||||
_handler.Add((ushort)EnumMessageId.C2S_SELECT_UniqueKey, PacketHandler.C2S_SELECT_UniqueKeyHandler);
|
||||
|
||||
_onRecv.Add((ushort)EnumMessageId.C2S_UPDATE_UniqueKey, MakePacket<C2S_UPDATE_UniqueKey>);
|
||||
_handler.Add((ushort)EnumMessageId.C2S_UPDATE_UniqueKey, PacketHandler.C2S_UPDATE_UniqueKeyHandler);
|
||||
}
|
||||
|
||||
public void OnRecvPacket(PacketSession session, ArraySegment<byte> buffer)
|
||||
{
|
||||
ushort count = 0;
|
||||
|
||||
ushort size = BitConverter.ToUInt16(buffer.Array, buffer.Offset);
|
||||
count += 2;
|
||||
ushort id = BitConverter.ToUInt16(buffer.Array, buffer.Offset + count);
|
||||
count += 2;
|
||||
|
||||
ushort packetSize = (ushort)(buffer.Count - count);
|
||||
byte[] packet = new byte[packetSize];
|
||||
Array.Copy(buffer.ToArray(), count, packet, 0, packetSize);
|
||||
|
||||
if (_onRecv.TryGetValue(id, out var action))
|
||||
action.Invoke(session, packet, id);
|
||||
}
|
||||
|
||||
void MakePacket<T>(PacketSession session, ArraySegment<byte> buffer, ushort id) where T : new()
|
||||
{
|
||||
if (CustomHandler != null)
|
||||
{
|
||||
CustomHandler.Invoke(session, buffer, id);
|
||||
}
|
||||
else
|
||||
{
|
||||
Action<PacketSession, ArraySegment<byte>> action = null;
|
||||
if (_handler.TryGetValue(id, out action))
|
||||
action.Invoke(session, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public Action<PacketSession, ArraySegment<byte>> GetPacketHandler(ushort id)
|
||||
{
|
||||
Action<PacketSession, ArraySegment<byte>> action = null;
|
||||
if (_handler.TryGetValue(id, out action))
|
||||
return action;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
namespace WebApi.Project.UniqueKeyApi.Socket.Packet
|
||||
{
|
||||
public interface IMessage
|
||||
{
|
||||
}
|
||||
|
||||
public class C2S : IMessage
|
||||
{
|
||||
// public EnumMessageId MessageId { get; set; }
|
||||
}
|
||||
|
||||
public sealed class C2S_INSERT_UniqueKey : C2S
|
||||
{
|
||||
public string Identity { get; set; }
|
||||
|
||||
public string Data1 { get; set; }
|
||||
public string Data2 { get; set; }
|
||||
public string Data3 { get; set; }
|
||||
public string Data4 { get; set; }
|
||||
public string Data5 { get; set; }
|
||||
}
|
||||
|
||||
public sealed class C2S_SELECT_UniqueKey : C2S
|
||||
{
|
||||
public string Identity { get; set; }
|
||||
}
|
||||
|
||||
public sealed class C2S_UPDATE_UniqueKey : C2S
|
||||
{
|
||||
public string Identity { get; set; }
|
||||
|
||||
public string Data1 { get; set; }
|
||||
public string Data2 { get; set; }
|
||||
public string Data3 { get; set; }
|
||||
public string Data4 { get; set; }
|
||||
public string Data5 { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user