static void WaitTcpConnect(object ob) { EventsClass.PackageSave Event = (EventsClass.PackageSave)((object[])ob)[0]; EventsClass.AddToAddrList AddEv = (EventsClass.AddToAddrList)((object[])ob)[1]; TcpListener Listener = new TcpListener(7778); Listener.Start(); TcpClient Client = Listener.AcceptTcpClient(); byte[] buf = new byte[4]; Client.GetStream().Read(buf, 0, 4); int Length = BitConverter.ToInt32(buf, 0); for (int i = 0; i < Length; i++) { buf = new byte[37]; Client.GetStream().Read(buf, 0, 37); AddEv?.Invoke(IPAddress.Parse(buf[0] + "." + buf[1] + "." + buf[2] + "." + buf[3]), 7777); PersonNetDataPackage PersonData = new PersonNetDataPackage(); ReadFromBuffer(PersonData, buf, null); Event?.BeginInvoke(PersonData, null, null); } FileTools.Log("Person list got"); }
void SendPersonDataPackage(PersonNetDataPackage Package, IPEndPoint EndPoint) { byte[] MainPackage; UdpClient GetClient = new UdpClient(); MainPackage = ConvertPackageToArray(Package); GetClient.Send(MainPackage, MainPackage.Length, EndPoint); GetClient.Close(); }
static void GetPackage(PersonNetDataPackage PersonData, List <Person> ls, int Port = 7777) { byte[] Buffer; IPEndPoint RemoveIPEndPoint = null; UdpClient GetClient = new UdpClient(Port); Buffer = GetClient.Receive(ref RemoveIPEndPoint); GetClient.Close(); ReadFromBuffer(PersonData, Buffer, ls); }
static void PackageWait(object ob) { EventsClass.PackageSave Event = (EventsClass.PackageSave)((object[])ob)[0]; List <Person> ls = (List <Person>)((object[])ob)[1]; while (true) { PersonNetDataPackage PersonData = new PersonNetDataPackage(); PackageReciever.GetPackage(PersonData, ls); FileTools.Log("Package got"); Event?.Invoke(PersonData); } }
void AddNetObject(object Package) { PersonNetDataPackage Data = (PersonNetDataPackage)Package; Person Per; if (Data.PersonID == -2) { return; } else if (Data.PersonID == -1) { string RemoveAddr = Data.X.ToString() + "." + Data.Y.ToString() + "." + Data.XSpeed.ToString() + "." + Data.YSpeed.ToString(); OutNetConnect.AddToAddrIPList(RemoveAddr); return; } if (!Data.IsNewPerson) { Per = GetPersonByID(Data.PersonID); if (Per == null) { return; } } else { Per = new Person(); Per.ID = (byte)Data.PersonID; if (!IsPerInColl(Per.ID)) { PersonList.Add(Per); } } Per.X = Data.X; Per.Y = Data.Y; Per.XSpeed = Data.XSpeed; Per.YSpeed = Data.YSpeed; if (Data.BulletCurner != -1) { AddBullet(Data.BulletCurner * Math.PI / 180, Per.X + 48, Per.Y + 48, Per); } ObjDraw.IsPersonInList(Per.ID, true); ObjDraw.AddToObjectTicksList(Per, Data.AnimAddr, Data.AnimLenght, ref Anims, BattleField.Image); }
static void ReadFromBuffer(PersonNetDataPackage PersonData, byte[] Buffer, List <Person> ls) { if (Buffer[4] == 3) { Thread SendPersons = new Thread(new ParameterizedThreadStart(SendPersonList)); string RemoveAddr = Buffer[0].ToString() + "." + Buffer[1].ToString() + "." + Buffer[2].ToString() + "." + Buffer[3].ToString(); object[] ob = new object[2]; ob[0] = RemoveAddr; ob[1] = ls; SendPersons.Start(ob); //Start sending person list PersonData.PersonID = -1; PersonData.X = Buffer[0]; PersonData.Y = Buffer[1]; PersonData.XSpeed = Buffer[2]; PersonData.YSpeed = Buffer[3]; ls.Add(new Person() { ID = Buffer[3], X = BitConverter.ToInt32(Buffer, 5), Y = BitConverter.ToInt32(Buffer, 9), XSpeed = BitConverter.ToInt32(Buffer, 13), YSpeed = BitConverter.ToInt32(Buffer, 17) }); } else { PersonData.PersonID = BitConverter.ToInt32(Buffer, 5); PersonData.X = BitConverter.ToInt32(Buffer, 9); PersonData.Y = BitConverter.ToInt32(Buffer, 13); PersonData.XSpeed = BitConverter.ToInt32(Buffer, 17); PersonData.YSpeed = BitConverter.ToInt32(Buffer, 21); PersonData.AnimAddr = BitConverter.ToInt32(Buffer, 25); PersonData.AnimLenght = BitConverter.ToInt32(Buffer, 29); PersonData.BulletCurner = BitConverter.ToInt32(Buffer, 33); if (Buffer[4] == 0) { PersonData.IsNewPerson = true; } else { PersonData.IsNewPerson = false; } } }
public void SendPerson(Person Per, int AnimAddr, int AnimLenght, bool IsNewPerson, int BulletCurner) { PersonNetDataPackage Package = new PersonNetDataPackage() { PersonID = Per.ID, X = Per.X, Y = Per.Y, XSpeed = Per.XSpeed, YSpeed = Per.YSpeed, AnimAddr = AnimAddr, AnimLenght = AnimLenght, IsNewPerson = IsNewPerson, BulletCurner = BulletCurner }; foreach (var i in AddrIPList) { SendPersonDataPackage(Package, i); } FileTools.Log("Person sended to all users"); }
static byte[] ConvertPackageToArray(PersonNetDataPackage Package) { byte[] MainPackage = new byte[37], buf; if (Package.IsNewPerson) { MainPackage[4] = 0; } else { MainPackage[4] = 2; } buf = BitConverter.GetBytes(Package.PersonID); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 5, 0, 4); buf = BitConverter.GetBytes(Package.X); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 9, 0, 4); buf = BitConverter.GetBytes(Package.Y); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 13, 0, 4); buf = BitConverter.GetBytes(Package.XSpeed); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 17, 0, 4); buf = BitConverter.GetBytes(Package.YSpeed); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 21, 0, 4); buf = BitConverter.GetBytes(Package.AnimAddr); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 25, 0, 4); buf = BitConverter.GetBytes(Package.AnimLenght); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 29, 0, 4); buf = BitConverter.GetBytes(Package.BulletCurner); ToolsClass.CopyFromArrayToArry(ref MainPackage, ref buf, 33, 0, 4); return(MainPackage); }