2016-03-23 4 views
0

У меня есть приложение для Windows, которое общается с сервером через веб-порты, я использую метеоритный сервер как сервер и websockets4net для связи на клиенте. при отправке сообщений на сервер (формат json). сервер ответит на websocket в другом порядке. Я могу отслеживать сообщения, отправленные на сервер. В C# мы можем создать образец потребителя, где я могу хранить messageid и callback в словаре и выполнять обратный вызов при получении ответа.Асинхронное выполнение событий с использованием веб-карт

//<int, Action>(<messageid,Callback delegate>) 
ConcurrentDictionary<int, Action> serverResponseCollection = new ConcurrentDictionary<int, Action>(); 

public send(JObject message,Action Callback) 
{ 
     socket.Send(message); 
     serverResponseCollection.Add(message.id,Callback); 
} 

void socket_MessageReceived(object sender, MessageReceivedEventArgs e) 
{ 
    //server response contains message id 
    //get callback function and execute 
    var callbackObj = serverResponseCollection[e.id]; 
    Callback(); 
} 
+0

Почему вы хотите связать разные обратные вызовы с каждым запросом, отправляемым на сервер? – gaurawerma

+0

Да, я называю разные серверные методы, может возвращать разные ответы, может обрабатываться независимо. –

+0

Можете ли вы показать мне, что вы делаете в client.Execute («ConfirmOrder», callback)? – gaurawerma

ответ

0

Вы можете добавить поле под названием «Метод» к объекту JSon и установите его значение на имя операции, которую вы выполняете при создании сообщения запроса.

message.Add("Method", "GetUser"); 

Служба также добавит поле «Метод» в ответ с тем же значением, которое клиент отправил в запросе.

И затем в обработчике ответа вы можете проанализировать значение поля Method, чтобы узнать, какую операцию вам нужно выполнить. И вы также избавитесь от сопоставления идентификаторов сообщений с обратными вызовами.

+0

Вы правы, но мое приложение многопоточно, многие потоки могут вызывать одни и те же методы сервера, а ответ будет другим, мы не можем реагировать на ответ в этом сценарии. –

+0

Тогда ваш вопрос неполный. Вы должны сначала изменить его. – gaurawerma