Обдумывал и работал над этими последними 48 часами, но ничего не добился. Так что позвольте мне сразу перейти к вопросу.
Я работаю с API.
Я отправляю запрос API как таковой http://localhost: 8080 / Execute .. ..et c .. et c <--- веб-запрос </p>
Это, в свою очередь, возвращает «ID».
API также отправляет через порт UDP номер заказа для этого идентификатора
- Таким образом, API получает запрос и отвечает идентификатором.
Затем
-API отправляет номер заказа, который он связывает с этим идентификатором на UDP-порт ПОСЛЕ выдачи идентификатора
Однако для этого нет установленного времени, это как есть.
Теперь на другом конце этого сервера находится BackEnd Server.
Это постоянно отправляет [Msg Updates] через UDP.
Таким образом, последовательность может go что-то вроде этого.
У меня настроен приемник UDP для порта 1234. У меня есть UDP Список настроен для порта 2222 <- внутренний сервер отправляет сообщения </p>
Я выполняю через API http://localhost: 8080 / execute ... et c (строковый ответ от API сервер) <--- r eceive ID (проходит время в миллисекундах) (UDP-порт 1234) <--- Номер заказа </p>
[Порт 2222] <--- Получает [Msg update] с деталями заказа. </p>
Проблема в [Msg Update] может поступать и поступает быстрее, чем заказ №, связанный с [MsgUpdate].
В настоящее время мое решение выглядит следующим образом, но кажется очень неуклюжим и неуклюжим (вы знаете это чувство, когда ваш код / дизайн заставляет чувствовать себя немного грязным) ну вот через что я сейчас прохожу. Вот мой нынешний способ решения проблемы.
Связи следующие.
1 Уникальный идентификатор ----> 1 Номер заказа.
Несколько состояний заказа ---> 1 OrderNumber (принято, отменено, .... et c)
Входящее сообщение с сервера имеет только OrderNumber и тег (ID), который вы получаете из API.
Итак, вот как я с этим справляюсь ... или пытаюсь.
И, пожалуйста, если вы, ребята, видите лучший способ сделать это, я полностью за это, я выброшу весь этот мусорный раствор в окно в одно мгновение.
Есть ли более чистый и элегантный способ sh этого?
Как видите, вы можете получать [Msg Updates] быстрее, чем получать OrderNumber, И каждое входящее [MsgUpdate] может иметь разные состояния для заказа ...
Например: # 1000 принято, # 1000 отменено, # 1001 принято, # 1001 отклонено [Недостаточно BP], # 1002 отменено, # 1010 частично выполнено
Но вывод состоит в том, что во входящих заказах нет ничего уникального, кроме номера заказа ( # 1001), и он связан только с идентификатором из API, который вы получаете после выполнения, затем нужно дождаться ответа UDP от API, чтобы получить номер заказа (# 1001), и только тогда вы узнаете, что это [1001] ВАШЕ сообщение. тьфу ......
В любом случае мой псевдокод, чтобы дать основную c предпосылку того, что я сделал, чтобы попытаться решить эту проблему.
[Client Class]
private IOrderNumberListener ordListener;
private IBackendListener _blistener;
public Client(IOrdernUmberListener ordListen, IBackendListener backListen)
{
ordListener = ordListen;
_blistener = backListen;
ordListener += IncomingOrderNo;
_blistener += ReceiveIncomingMsgsFromServer;
}
public string IncomingOrderNo(string exeord)
{
//Deal with it
}
/// This method will recieve data for everything including things that isn't related to the ID
private void ReceiveIncomingMsgsFromServer(object sen`enter code here`der, data)
{
//Process Incoming data
//So in here is a check for the OrderNumber which doesn't have the ID associated with it. Just
the OrderNumber with details.
if(data.ordernumber == this.Ordernumber) <--- this I feel isn't all that great.
// QUERY the _blistener.GetOrderDetails(this.OrderNumber);
//Deal with things here.
}
public string executeOrder(string url)
{
webrequest..(url)...etc
}
[Back End Server Class]
//UDP Listener Configuration stuff here
......
public event EventHandler<Msg> Update;
private Dictionary<string, msgData> OrderDb = new Dictionary.....etc
private void sendUpdate(data)
{
//raise event method etc..
}
private process packet(byte[] data)
{
/// process data
sendUpdate(processedData);
}
public msgData GetOrderDetails(string ordernumber)
{
//Check db return orderdetails.
}