Search code examples
c#eventstcpmodbus

read tcp via event


I'm kinda new to C# and I'm trying to create a Modbus-TCP slave.

All i want to do is to call an event handler when i recieve data from the TCP Master.

namespace Mark_II.Device
{
    class Slave_TCP : mSlave
    {
        short trans_ID;
        byte[] Respond;       
        byte[] MasterMessage;
        TcpClient Client;
        NetworkStream stream;


        public Slave_TCP(String IP, int Port)
        {
            Client = new TcpClient(IP, Port);

            stream = Client.GetStream();
            // insert "call event handler" here<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        }


        private void client_OnReceiveData(object sender, SerialDataReceivedEventArgs e)
        {  
            byte[] message = new byte[Client.ReceiveBufferSize];                       
            stream.Read(message, 0, message.Length);

        }
    }
}

I have been looking around but i couldn't find anything... please help me.

tl;dr: I'm looking for a way to raise an event, when my Client receives data from a master.


Solution

  • In general, events in C# works like this:

    public delegate void MessageHandler(string message);
    
    public class Client
    {
       public event MessageHandler MessageArrived;
    
       public void CheckForMessage() //logic to check if message is received
       {
         //other code to check for message
          if(MessageArrived != null)
             MessageArrived("message received");
       }
    }
    
    public class DisplayMessage
    {
      public void DisplayMessage(string message)
      {
        Console.WriteLine("Message: {0}", message);
      }
    }
    

    Code to hook up an event:

     public class ProcessMessage
     {
        Client client = new Client();
        DisplayMessage msg = new DisplayMessage();
        client.MessageArrived += new MessageHandler(msg.DisplayMessage);
        client.CheckForMessage();
     }