示例#1
0
        private void establishUDP(int uniqueID, IPEndPoint serverEndPoint)
        {
            if (udpConnection != null)
            {
                return;
            }
            udpConnection = new UDPConnection();
            udpConnection.PacketRecievedAsync += new Common.Networking.BaseConnection.PacketRecievedAsyncEventHandler(udpConnection_PacketRecievedAsync);

            // TODO: optimize
            var mem = new MemoryStream();
            var bw  = new BinaryWriter(mem);

            bw.Write((byte)InternalPacketType.ClientUDPID);
            bw.Write(uniqueID);

            udpIPEndPoint = serverEndPoint;
            udpConnection.SendPacket(mem.ToArray(), serverEndPoint);
            udpConnection.Receiving = true;
        }
示例#2
0
        /*public ClientPacketTransporterNetworked<T> GetPacketTransporter<T>() where T : INetworkPacket
         * {
         *  return packetInfos[ typeof( T ) ] as ClientPacketTransporterNetworked<T>;
         * }*/
        /*
         * /// <summary>
         * /// This function sends a packet over the network. Currently this functions should return immediately
         * /// THIS FUNCTION IS THREAD-SAFE WARNING: check this!
         * /// </summary>
         * /// <typeparam name="T"></typeparam>
         * /// <param name="packet"></param>
         * public void SendPacket<T>( T packet ) where T : INetworkPacket
         * {
         *  ClientPacketTransporterNetworked<T> transporter = packetTransportersMap[ typeof( T ) ] as ClientPacketTransporterNetworked<T>;
         *
         *  SendPacket( transporter, packet );
         *
         * }*/

        /// <summary>
        /// This function sends a packet over the network. Currently this functions should return immediately
        /// This is faster than without the packetinfo, since the lookup is omitted.
        /// THIS FUNCTION IS THREAD-SAFE WARNING: check this!
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="info"></param>
        /// <param name="packet"></param>
        internal void SendPacket <T>(ClientPacketTransporterNetworked <T> transporter, T packet) where T : INetworkPacket
        {
            if (!IsReady)
            {
                throw new InvalidOperationException("This ClientPacketManager is not ready for sending yet!");
            }
            if (transporter.NetworkID == -1)
            {
                throw new InvalidOperationException("No networkID was assigned to this packet type!");
            }

            //TODO: WARNING: NEED SERIOUS OPTIMIZATION!!!! USE A BUFFER FOR THIS INSTEAD OF MASSIVE INSTANCE SPAWNING!!!
            MemoryStream strm = new MemoryStream();

            BinaryWriter bw = new BinaryWriter(strm);

            bw.Write(transporter.NetworkID);
            transporter.Factory.ToStream(bw, packet);

            if ((transporter.Flags & PacketFlags.TCP) != PacketFlags.None)
            {
                tcpConnection.SendPacket(strm.ToArray(), TCPPacketBuilder.TCPPacketFlags.None);
            }
            else if ((transporter.Flags & PacketFlags.UDP) != PacketFlags.None)
            {
                if (udpConnection == null)
                {
                    Console.WriteLine("Send UDP packet discared because UDP is not yet initialized!");
                }
                else
                {
                    udpConnection.SendPacket(strm.ToArray(), udpIPEndPoint);
                }
            }
            else
            {
                throw new InvalidOperationException(
                          "The transporter flags do not contain an TCP or UDP part!! Unable to send packets");
            }
        }
 private void SendPacket(byte[] bytes, GenericChannel channel, IPAddress ip, int port)
 {
     _connection.SendPacket(ArrayUtils.AddByteToArray(bytes, _channelNumbers[channel]), ip, port);
 }