Esempio n. 1
0
        protected void StreamReceived(NetworkingPlayer sender, BMSByte bytes)
        {
            if (TrackBandwidth)
            {
                BandwidthIn += (ulong)bytes.Size;
            }

            lock (tmp)
            {
                bytes.MoveStartIndex(1);
                readStream.Reset();

                if (base.ProcessReceivedData(sender, bytes, bytes[0]))
                {
                    return;
                }

                // TODO:  Not needed after initialization
                readStream.SetProtocolType(Networking.ProtocolType.TCP);
                if (readStream.Consume(this, sender, bytes) == null)
                {
                    return;
                }

                // Do not process player because it is processed through the listener
                if (readStream.identifierType == NetworkingStream.IdentifierType.Player)
                {
                    if (!Connected)
                    {
                        OnConnected();
                    }

                    return;
                }

                if (readStream.Ready)
                {
                    // TODO:  These need to be done better since there are many of them
                    if (readStream.Bytes.Size < 22)
                    {
                        try
                        {
                            if (ObjectMapper.Compare <string>(readStream, "update"))
                            {
                                UpdateNewPlayer(sender);
                            }

                            if (ObjectMapper.Compare <string>(readStream, "disconnect"))
                            {
                                // TODO:  If this eventually sends something to the player they will not exist
                                Disconnect(sender);
                                return;
                            }
                        }
                        catch
                        {
                            throw new NetworkException(12, "Mal-formed defalut communication");
                        }
                    }
                }

                if (ReadStream(sender, readStream) && IsServer)
                {
                    RelayStream(readStream);
                }

                DataRead(sender, readStream);
            }
        }