// ReSharper disable once TooManyDeclarations private async void ThreadProc(object state) { try { string imei; var client = (TcpClient)state; byte[] buffer = new byte[client.ReceiveBufferSize]; NetworkStream stream = ((TcpClient)state).GetStream(); stream.Read(buffer, 0, client.ReceiveBufferSize); imei = CleanInput(Encoding.ASCII.GetString(buffer.ToArray()).Trim()); if (Commonhelper.IsValidImei(imei)) { await ParseAvlDataAsync(client, stream, imei).ConfigureAwait(false); } } catch (InvalidCastException e) { Trace.TraceWarning(e.Message); _log.Error($"{DateTime.Now} -Error message : {e.Message} details : {e.InnerException?.Message}"); } catch (Exception e) { Trace.TraceWarning(e.Message); _log.Error($"{DateTime.Now} -Error message : {e.Message} details : {e.InnerException?.Message}"); //throw; } }
public string GetIMEI(byte[] buffer, int recievedBytes) { var imei = string.Empty; var dataReceived = Encoding.ASCII.GetString(buffer, 2, recievedBytes); if (imei != string.Empty || !Commonhelper.IsValidImei(dataReceived)) { return(imei); } imei = dataReceived; return(imei); }
// ReSharper disable once TooManyDeclarations private async void ThreadProc(object state) { try { var client = (TcpClient)state; byte[] buffer = new byte[client.ReceiveBufferSize]; NetworkStream stream = ((TcpClient)state).GetStream(); int bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize) - 2; string imei = Encoding.ASCII.GetString(buffer, 2, bytesRead); if (Commonhelper.IsValidImei(imei)) { await ParseAvlData(client, stream, imei); } } catch (InvalidCastException e) { Trace.TraceWarning(e.Message); } catch (Exception e) { Trace.TraceWarning(e.Message); //throw; } }
/// <summary> /// /// </summary> /// <param name="state"></param> private static async void ThreadProc(object state) { var client = (TcpClient)state; byte[] buffer = new byte[client.ReceiveBufferSize]; NetworkStream stream = ((TcpClient)state).GetStream(); int bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize) - 2; string dataReceived = Encoding.ASCII.GetString(buffer, 2, bytesRead); try { if (Commonhelper.IsValidImei(dataReceived)) { await ParseTeltonikaData(client, stream, buffer, dataReceived); //client.Close(); } // il s'agit du format de nouveaux boitiers créent par khaled else if (dataReceived.Contains(",") && !dataReceived.Contains("(")) { arduinoBox = true; NewBoxParser parser = new NewBoxParser(); dataReceived = dataReceived.Replace("\r\n", "").Replace("\r", "").Replace("\n", ""); try { var result = parser.Parse(dataReceived.Split('\r')); foreach (var r in result) { await _bus.Publish(r); } } catch (ValidationException e) { _log.Error("error message :" + e.Message + " details:" + e.InnerException + " at:" + DateTime.Now); //throw; } } else { // boitier GT02A Tk1003Parser parser = new Tk1003Parser(); arduinoBox = false; var result = parser.Parse(dataReceived.Split('\r')); // envoyer une message de reception et une déconnexion aux clients if (client.Connected) { await SendCommand(stream, result.FirstOrDefault().Value, client); } foreach (var r in result) { foreach (var createTk103Gpse in r.Key) { await _bus.Publish(createTk103Gpse); } } // client.Close(); } } catch (Exception e) { _log.Error("error message :" + e.Message + " details:" + e.InnerException + " at:" + DateTime.Now); Console.WriteLine(e); if (!arduinoBox) { client.Close(); } } // Console.ReadLine(); }
public override async Task OnConnectedAsync(ConnectionContext connection) { _logger.LogInformation("new connection: " + connection.ConnectionId + ":" + connection.RemoteEndPoint.AddressFamily); var imei = string.Empty; while (true) { try { await semaphore.WaitAsync().ConfigureAwait(false); var result = await connection.Transport.Input.ReadAsync().ConfigureAwait(false); var buffer = result.Buffer; StringBuilder builder = new StringBuilder(); var receivedData = new List <byte []>(); foreach (var segment in buffer) { builder.Append(Encoding.ASCII.GetString(segment.ToArray(), 0, segment.ToArray().Length)); receivedData.Add(segment.ToArray()); } var data = builder.ToString(); // remove bad characters data = Regex.Replace(data, @"[^\w\.@-]", "", RegexOptions.None); // if the data received is valid imei we send to modem 1 if (Commonhelper.IsValidImei(data)) { byte[] b = { 0x01 }; _logger.LogInformation($"new modem connected with id : {data}"); imei = data; var command = new CreateBoxCommand(); command.Imei = imei; await _mediator.Send(command).ConfigureAwait(false); await connection.Transport.Output.WriteAsync(b).ConfigureAwait(false); } // if the data received is avl data we parse the avl data and send to the modem the number of data received else { foreach (var receivedBytes in receivedData) { var gpsResult = await ParseAvlDataAsync(imei, receivedBytes).ConfigureAwait(false); var events = new TLGpsDataEvents { Id = Guid.NewGuid(), Events = gpsResult }; var bytes = Convert.ToByte(gpsResult.Count); await connection.Transport.Output.WriteAsync(new byte[] { 0x00, 0x00, 0x00, bytes }).ConfigureAwait(false); _mediator.Publish(events).GetAwaiter(); } } if (result.IsCompleted) { break; } semaphore.Release(); connection.Transport.Input.AdvanceTo(buffer.End); } catch (Exception e) { _logger.LogError(e.Message); _logger.LogError(e.InnerException?.Message); semaphore.Release(); break; } } Console.WriteLine(connection.ConnectionId + " disconnected"); }