public static async Task<bool> StoreDataAsync(DeviceDataRecive model) { try { if (!isMarkExists(model.MarkCode)) throw new Exception("Mark not found"); if (!DeviceFindOrCreate(model)) throw new Exception("Error with create new device"); DataCollection dataCollection = new DataCollection() { Id=Guid.NewGuid(), MarkCode = model.MarkCode, SerialNumber = model.SerialNumber, Signal = model.Signal }; var result=dataCollectionService.AddData(dataCollection); if (result.Success) { var status = HubConnectionState.Connected; if (connection == null || connection.State != HubConnectionState.Connected) { if (! await ConnctToHubAsync()) { status = HubConnectionState.Disconnected; } } if (status == HubConnectionState.Connected) { try { connection.InvokeAsync("ReciveMessage", result.Data.MarkCode, result.Data.SerialNumber.ToString(), result.Data.Signal.ToString(), result.Data.DateCreated.ToString()).Wait(); } catch (Exception e) { Console.WriteLine("signalR Error: " + e.Message); } } // todo signalr return true; } else { throw new Exception("Error with store data"); } } catch (Exception err) { // todo log error return false; } }
private static bool DeviceFindOrCreate(DeviceDataRecive model) { var result = deviceService.GetDevice(model.MarkCode, model.SerialNumber); if (result.Success && result.Data != null) return true; else { Device device = new Device() { Port = model.Port, IpAddress = model.IpAddress, MarkCode = model.MarkCode, SerialNumber = model.SerialNumber }; var addResult= deviceService.AddDevice(device); return addResult.Success; } }
public static void StartServer() { IPAddress ipAddress = IPAddress.Parse(SERVER_IP); IPEndPoint localEndPoint = new IPEndPoint(ipAddress, PORT_NO); Socket listener=null; Socket handler = null; try { listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listener.Bind(localEndPoint); listener.Listen(10); Console.WriteLine("Waiting for a connection..."); // = listener.Accept(); byte[] bytes = null; while (true) { bytes = new byte[2048]; handler = listener.Accept(); int bytesRec = handler.Receive(bytes); if (bytes[0] == 2) { string hexLength = bytes[2].ToString("X2") + bytes[1].ToString("X2"); StringBuilder hex = new StringBuilder(bytes.Length * 2); int length = int.Parse(hexLength, System.Globalization.NumberStyles.HexNumber); if (bytes[length + 2] == 3) { string serialNumber = ""; string mark = ""; string signal = ""; string senderIpAdress = handler.LocalEndPoint.ToString().Split(":")[0]; string senderPortNumber = handler.LocalEndPoint.ToString().Split(":")[1]; for (int i = 3; i < length + 2; i++) { if (i == 3) { mark = System.Convert.ToChar(bytes[i]).ToString(); continue; } if (i >= length ) { signal += System.Convert.ToChar(bytes[i]).ToString(); continue; } serialNumber += System.Convert.ToChar(bytes[i]).ToString(); } DeviceDataRecive newData = null; try { newData = new DeviceDataRecive() { MarkCode = mark, DateTime = DateTime.Now, SerialNumber = long.Parse(serialNumber), Signal = int.Parse(signal), IpAddress=senderIpAdress, Port=senderPortNumber }; } catch { // todo log wrong format of message } if (newData != null) { StoreDataAsync(newData); } //todo save in data base Console.WriteLine("Text received : {0}\nMark : {1}\nSerial : {2}\nSignal : {3} From : {4}", DateTime.Now,mark,serialNumber,signal,senderIpAdress); DateTime utcNow = DateTime.UtcNow; long utcNowAsLong = utcNow.ToBinary(); byte[] utcNowBytes = BitConverter.GetBytes(utcNowAsLong); List<byte> returnMessage = new List<byte>(); // start byte returnMessage.Add(2); // message length bytes byte[] messageLength = BitConverter.GetBytes((Int16)utcNowBytes.Length); //if (BitConverter.IsLittleEndian) // Array.Reverse(messageLength); returnMessage.AddRange(messageLength); // timestam bytes returnMessage.AddRange(utcNowBytes); //finish bytes returnMessage.Add(3); //byte[] msg = returnMessage.ToArray(); handler.Send(returnMessage.ToArray()); } } } handler.Shutdown(SocketShutdown.Both); handler.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); handler.Shutdown(SocketShutdown.Both); handler.Close(); } }