Пример #1
0
 /// <summary>
 /// Sends data synchronously, ignores any exceptions, thread-safe
 /// </summary>
 /// <param name="sender">Sending client object</param>
 /// <param name="data">The payload</param>
 /// <param name="ep">Receiver's endpoint</param>
 /// <returns>True on success, false otherwise</returns>
 internal static bool SecureOut(UdpClient sender, NetPacket data, IPEndPoint ep)
 {
     try
     {
         lock (ol) sender.Send(data, data.Length, ep);
         return true;
     }
     catch { }
     return false;
 }
Пример #2
0
 /// <summary>Reads a single game object's data from the packet</summary>
 /// <param name="np"></param>
 /// <returns></returns>
 private static GameObj ReadEntData(NetPacket np)
 {
     uint id = np.ReadUInt();
     GameObj ret;
     string cls = np.ReadString();
     if ((ret = PaintKiller.GetObj(id)) == null)
         ret = (GameObj)Type.GetType(cls).GetConstructor(new Type[] { typeof(uint) }).Invoke(new object[] { id });
     ret.SetHM(np.ReadShort(), np.ReadShort());
     ret.state = np.ReadByte();
     ret.frame = np.ReadByte();
     ret.dir = np.ReadFloat();
     ret.ang = new Vector2(np.ReadFloat(), np.ReadFloat());
     ret.spd = new Vector2(np.ReadFloat(), np.ReadFloat());
     ret.pos = new Vector2(np.ReadFloat(), np.ReadFloat());
     ret.fce = new Vector2(np.ReadFloat(), np.ReadFloat());
     if (ret is GEC)
     {
         GEC g = (GEC)ret;
         g.gfx = PaintKiller.GetTex(np.ReadString());
         g.SetPrefs(np.ReadByte());
     }
     else if (ret is GPChain) ((GPChain)ret).SetBolt(new Vector2(np.ReadFloat(), np.ReadFloat()));
     return ret;
 }
Пример #3
0
 /// <summary>Sends a packet to a specific endpoint</summary>
 /// <param name="np">The payload</param>
 /// <param name="ep">Client's endpoint</param>
 private void Send(NetPacket np, IPEndPoint ep)
 {
     Net.SecureOut(server, np, ep);
 }
Пример #4
0
 /// <summary>Writes data of a single game object into a packet</summary>
 /// <param name="data">The output packet</param>
 /// <param name="go">A game object to extract data from</param>
 private void WriteData(NetPacket.Factory data, GameObj go)
 {
     data.WriteUInt(go.ID);
     data.WriteString(go.GetType().FullName);
     data.WriteShort(go.hp);
     data.WriteShort(go.mp);
     data.WriteByte(go.state);
     data.WriteByte(go.frame);
     data.WriteFloat(go.dir);
     data.WriteFloat(go.ang.X);
     data.WriteFloat(go.ang.Y);
     data.WriteFloat(go.spd.X);
     data.WriteFloat(go.spd.Y);
     data.WriteFloat(go.pos.X);
     data.WriteFloat(go.pos.Y);
     data.WriteFloat(go.fce.X);
     data.WriteFloat(go.fce.Y);
     // TODO: Add a member method into GameObj for writing/reading?
     if (go is GEC)
     {
         GEC g = (GEC)go;
         data.WriteString(g.gfx.Name);
         data.WriteByte(g.GetPrefs());
     }
     else if (go is GPChain)
     {
         GPChain g = (GPChain)go;
         data.WriteFloat(g.GetBoltDest().X);
         data.WriteFloat(g.GetBoltDest().Y);
     }
 }
Пример #5
0
 /// <summary>Sends a packet to all registered clients</summary>
 /// <param name="np">The payload</param>
 private void Broadcast(NetPacket np)
 {
     for (int i = 1; i < 4; ++i)
         if (PaintKiller.P[i] != null)
             Send(np, PaintKiller.P[i].ep);
 }