public static void Wykonaj(Pakiet _pakiet) { List<object> obiekty = new List<object>(); MethodInfo[] methods = Ustawienia.funkcjeOdbierajace.GetType().GetMethods(); int indexer = 0; foreach (MethodInfo info in methods) { if (info.Name == _pakiet.NazwaFunkcji()) { ParameterInfo[] pars = info.GetParameters(); foreach (ParameterInfo p in pars) { switch (p.ParameterType.Name) { case "String": { obiekty.Add(Konwersja.ByteToString(_pakiet.argumenty[indexer])); } break; case "Int32": { obiekty.Add(Konwersja.ByteToInt(_pakiet.argumenty[indexer])); } break; case "Socket": { obiekty.Add(_pakiet.kto); indexer--; } break; } indexer++; } info.Invoke(null, obiekty.ToArray()); } } }
static void CiecieBuffora(Socket _socket, Klient _klient, int _odebrane) { _klient.bufforZajete += _odebrane; int indexer = 0; bool przerwanie = false; while (_klient.bufforZajete - indexer > 0) { int dlugosc = (int)_klient.buffor[indexer] - 1; indexer++; if (dlugosc <= _klient.bufforZajete - indexer) { byte[] przejsciowa = new byte[dlugosc]; Array.Copy(_klient.buffor, indexer, przejsciowa, 0, dlugosc); Pakiet pakiet = new Pakiet(przejsciowa, _socket); pakiet.Wykonanie(); Staty.pakietyOdebrane++; Staty.WyswietlStaty(); indexer += dlugosc; } else { indexer--; byte[] przejsciowa = new byte[_klient.bufforZajete - indexer]; Array.Copy(_klient.buffor, indexer, przejsciowa, 0, _klient.bufforZajete - indexer); Array.Copy(przejsciowa, _klient.buffor, przejsciowa.Length); _klient.bufforZajete = przejsciowa.Length; przerwanie = true; break; } } if (!przerwanie) _klient.bufforZajete = 0; }