static void invoke(byte[] bytes, PeopleData people) { var T = people.GetType(); var mis = T.GetMethods(); byte mid = bytes[0]; int offset = 1; foreach (var mi in mis) { if (IsValidMethod(mi)) { mid--; } if (mid == 0) { var pis = mi.GetParameters(); if (pis.Length == 0) { mi.Invoke(people, null); break; } object[] objs = new object[pis.Length]; int i = 0; foreach (var pi in pis) { objs[i++] = ByteToObj(pi.ParameterType, bytes, ref offset); } mi.Invoke(people, objs); break; } } }
static void Main(string[] args) { PeopleData people = new PeopleData(); UdpClient udpClient = new UdpClient(11001); try { //IPEndPoint object will allow us to read datagrams sent from any source. IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); for (int i = 0; i < 6; i++) { // Blocks until a message returns on this socket from a remote host. Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); invoke(receiveBytes, people); people.ShowAge(); } udpClient.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } }