Koneksi Mesin DCU QR Code Scanner

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace Scanner
{
    public class DCUConnection
    {
        public Socket Sock { get; set; }
        public string Message { get; set; }
        public bool ConnectStatus { get; set; }
        public string IpAdress { get; set; }
        public DateTime LogDate { get; set; }
        public Task Task { get; set; }

        public DCUConnection()
        {
            Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ConnectStatus = false;
        }

        public bool Connect(IPEndPoint ip)
        {
            try
            {
                Sock.Connect(ip);
                SendMessage(Command.CONNECT); //Connect, Green Led On
                Message = $"{DateTime.Now} : DCU - 1 Connected, ready to scan...";
                LogDate = DateTime.Now;
                ConnectStatus = true;
                IpAdress = ip.Address.ToString();
                return ConnectStatus;

            }
            catch (Exception e)
            {
                Message = $"{DateTime.Now} : DCU - 1 Connecting failed !, {e.Message}";
                ConnectStatus = false;
                return ConnectStatus;
            }
        }

        public void SendMessage(string data)
        {
            byte[] byteData = Encoding.ASCII.GetBytes(data);
            try
            {
                Sock.Send(byteData);
                Message = $"{DateTime.Now} : Send : {data}";
            }
            catch (Exception e)
            {
                Message = $"{DateTime.Now} : Send Command/Data to DCU - 1 failed !, {e.Message}";
            }

        }

        public bool Disconnect()
        {
            try
            {
                SendMessage(Command.DISCONNECT);
                Sock.Disconnect(false);
                Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //must be initialize so it can be connect again
                Message = $"{DateTime.Now} : DCU - 1 Disconnected";
                LogDate = DateTime.Now;
                ConnectStatus = false;
                return true;
            }
            catch (Exception e)
            {
                Message = $"{DateTime.Now} : DCU - 1 Disconnecting failed !, {e.Message}";
                return false;
            }

        }

        public string Receive()
        {

            byte[] buffer = new byte[64];
            string str = "";
            try
            { // receive data with timeout 10s
                str = Encoding.UTF8.GetString(ReceiveAll(Sock));
            }
            catch (Exception e)
            {
                Message = $"{DateTime.Now} : DCU - 1 Receiving data failed !, {e.Message}";
            }

            return str;
        }

        public byte[] ReceiveAll(Socket socket)
        {
            var buffer = new List<byte>();

            var currByte = new Byte[1];
            var byteCounter = 0; string str = "";
            if (socket.Available > 0)
            {
                byteCounter = socket.Receive(currByte, currByte.Length, SocketFlags.None);
                str = Encoding.UTF8.GetString(currByte);

                while (str != "\r")
                {
                    byteCounter = socket.Receive(currByte, currByte.Length, SocketFlags.None);

                    if (byteCounter.Equals(1))
                    {
                        buffer.Add(currByte[0]);
                        str = Encoding.UTF8.GetString(currByte);
                    }
                }
            }

            return buffer.ToArray();
        }
    }
}

Indra Rahmat Jatnika has written 10 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>