private Telegram ProcessTelegram(Telegram telegram) { if (telegram == null) { throw new ArgumentNullException("telegram"); } // заполняем служебные поля телеграммы FillSysFields(telegram); // сериализуем телеграмму в бинарный формат var tmp = GSerialize.SerializeBytes(telegram); var client = GetClient(); var resultData = client.ProcessTelegramAsync(tmp); var waitTime = telegram.TimeOut ?? DefaultTimeout; if (!resultData.Wait(waitTime == 0 ? -1 : waitTime)) { throw new TimeoutException(ExceptionResources.TimeoutExceptionMessage); } var data = resultData.Result; if (data == null) { return(null); } var resultTelegram = GSerialize.DeserializeBytes <Telegram>(data); return(resultTelegram); }
public SocketMessageTemplate GetMessage(byte[] buffer) { return((buffer == null || buffer.Length == 0) ? new SocketMessageTemplate { Action = (int)SocketMessageTemplate.ActionType.None } : GSerialize.DeserializeBytes <SocketMessageTemplate>(buffer)); }
private async Task <byte[]> ProcessTelegramTaskBasedAsync(byte[] data) { try { _processes++; if (_processes > 1) { Log.DebugFormat("Parallel processing of {0} telegrams", _processes); } _channelTimer.Change(_channelTimeout, _channelTimeout); if (_manager == null) { throw new OperationException("IServiceManager is not initialized"); } return(await Task.Factory.StartNew(() => { if (data == null || data.Length == 0) { Log.Warn("Receive clear data (null or length=0"); return null; } //жестко обрубаем поток, в случае отмены операции using (_cancelOperation.Token.Register(Thread.CurrentThread.Abort)) { // разжимаем в телеграмму var telegram = GSerialize.DeserializeBytes <Telegram>(data); // обрабатываем var resultTelegram = _manager.ProcessTelegram(telegram); // сериализуем ответ return GSerialize.SerializeBytes(resultTelegram); } }, _cancelOperation.Token)); } catch (Exception ex) { if (_cancelOperation.IsCancellationRequested) { Log.DebugFormat("All processes were cancelled for client session '{0}'", _sessionId); } else { Log.Debug(ex); } return(null); } finally { _processes--; } }
public SocketMessageTemplate GetMessage(byte[] buffer, int bytestoread) { var buff = new byte[bytestoread]; /*for (var i = 0; i < bytestoread; i++) * { * buff[i] = buffer[i]; * }*/ Array.Copy(buffer, 0, buff, 0, bytestoread); return(GSerialize.DeserializeBytes <SocketMessageTemplate>(buff)); }