예제 #1
0
        /// <summary>
        /// Return true if packet was recognised and processed
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        internal bool processReceivedPacket(byte[] dgram)
        {
            // TODO: this is massive memory allocation and needs a buffer to work
            BinaryReader br = new BinaryReader(new MemoryStream(dgram));

            IClientPacketTransporterNetworked transporter = findCorrectPacketTransporter(br);

            if (transporter == null)
            {
                return(false);
            }

            // I think this currently is unnecessary since the tcpconnection calls this event on one thread :D

            lock (this)
            {
                transporter.QueueReceivedPacket(br);

                /*lock ( transporter )                {
                 * Monitor.PulseAll( transporter );
                 * while ( transporter.WaitingReceiversCount > 0 ) Monitor.Wait( transporter );
                 * }*/
            }

            return(true);
        }
예제 #2
0
 private void setTransporterNetworkID(int networkID, IClientPacketTransporterNetworked transporter)
 {
     transporter.SetNetworkID(networkID);
     transporterNetworkIDMap[networkID] = transporter;
 }