public void Execute(HttpRequest httpRequest)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Data
            Entity entity = new Entity(null);

            entity.EntityShutdown += Listener;

            EntityIdleComponent idle = new EntityIdleComponent();

            entity.Add(idle);

            SessionComponent session = new SessionComponent()
            {
                Key = Key.Parse(httpRequest.Data)
            };

            entity.Add(session);

            SessionMap.Add(session.Id, entity);
            Server.Sessions = SessionMap.Count;

            // TODO: Use Diffie–Hellman
            //
            // Response
            HttpResponse httpResponse = new HttpResponse(session.Id)
            {
                Data = SecurityUtil.Token
            };

            channel.Send(httpResponse);
#if DEBUG
            LogComponent log = new LogComponent(Log.Controller);
            entity.Add(log);

            Log.Add(httpRequest, httpResponse);
#endif
        }
Example #2
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonInfoRequestMessage jsonRequestMessage = JsonInfoRequestMessage.Parse(jsonRequest.Message);

            // Data
            HttpCode        code   = HttpCode.Ok;
            Entity          entity = session.Owner;
            TunnelComponent tunnel = entity.Get <TunnelComponent>();

            if (tunnel != null)
            {
                PingRequestCommand command = new PingRequestCommand(entity, tunnel.Connection);
                code = command.Execute();
                if (code == HttpCode.Ok)
                {
                    entity.Update();
                }
            }

            // Response
            JsonInfoResponseMessage jsonResponseMessage = new JsonInfoResponseMessage()
            {
                Entities = Server.Entities, Sessions = Server.Sessions, Clients = Server.Clients, Groups = Server.Groups
            };
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse(code)
            {
                Data = session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
    /// <summary>
    /// Takes a Message and does something with it.
    /// </summary>
    /// <param name="peerId"></param>
    /// <param name="channelId"></param>
    /// <param name="data"></param>
    private void OnMessage(ulong peerId, byte channelId, byte[] data)
    {
        NetworkChannel channel = (NetworkChannel)channelId;

        //Debug.Log("Got Messege from: " + peerId + " on Channel: " + channel);
        switch (channel)
        {
        case NetworkChannel.INPUT_DATA:

            PlayerHandler.INSTANCE?.SetInputOnController(data);
            break;

        case NetworkChannel.LOADSCENE:
            GameManager.LoadSceneData sceneToLoad = new GameManager.LoadSceneData(data);
            GameManager.INSTANCE.LoadScene(sceneToLoad.scene);
            break;

        case NetworkChannel.CHARACTER_POSITION:
            PlayerHandler.INSTANCE?.SetPositionOfCharacter(data);
            break;

        case NetworkChannel.CONTROLLER_SYNC:
            PlayerHandler.PlayerHandlerData handlerData = new PlayerHandler.PlayerHandlerData(data);
            PlayerHandler.INSTANCE?.SetAllPlayers(handlerData.orderSelected, handlerData.orderOfId);
            break;

        case NetworkChannel.SCORE_SYNC:
            ScoreData scoreData = new ScoreData(data);
            ScoreUpdater.INSTANCE?.UpdateScore(scoreData);
            break;

        case NetworkChannel.PORTRAITS_SYNC:
            DisplayPlayers.INSTANCE.SetOrder(data);
            break;

        default:
            Debug.Log(peerId + " : Sent messege was not reognized");
            break;
        }
    }
Example #4
0
        public void ShouldReceiveOnChildWhenSent()
        {
            var childAddress = new NodeAddress("child");
            var localAddress = new NodeAddress("local");
            var data         = NetworkChannel <string> .Serialize("Hello world");

            var child = new Mock <INode>();

            child.Setup(x => x.Address).Returns(childAddress);
            var network = new Mock <INetwork>();

            network.Setup(x => x.FindOrDefault(null)).Returns((INode)null);
            network.Setup(x => x.FindOrCreate(childAddress)).Returns(child.Object);
            network.Setup(x => x.FindOrDefault(childAddress)).Returns(child.Object);

            var local = new Node(localAddress, network.Object);

            local.Connect(childAddress);
            local.Send(typeof(string).ToString(), data, null);

            child.Verify(x => x.Send(typeof(string).ToString(), data, It.IsAny <NodeAddress>()));
        }
        public HttpCode Execute(string jsonId, string jsonData, JsonChunk jsonChunk)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonDownloadRequestMessage jsonRequestMessage = new JsonDownloadRequestMessage(jsonId)
            {
                Chunk = jsonChunk
            };
            JsonPacket  jsonRequest = new JsonPacket(jsonRequestMessage, jsonData);
            HttpRequest httpRequest = new HttpRequest()
            {
                Data = Session.Encrypt(jsonRequest)
            };

            // Response
            HttpResponse httpResponse;

            lock (Socket)
            {
                channel.Send(httpRequest);
                channel.Receive(out httpResponse);
            }

            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
            }

            return(Code);
        }
Example #6
0
        public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest)
        {
            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonPingRequestMessage jsonRequestMessage = JsonPingRequestMessage.Parse(jsonRequest.Message);

            // Response
            JsonPingResponseMessage jsonResponseMessage = new JsonPingResponseMessage();
            JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage);

            HttpResponse httpResponse = new HttpResponse()
            {
                Data = Session.Encrypt(jsonResponse)
            };

            channel.Send(httpResponse);
#if DEBUG
            Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
        }
Example #7
0
        public void ReadStatus(NetIncomingMessage message)
        {
            NetConnectionStatus status  = (NetConnectionStatus)message.ReadByte();
            NetworkChannel      channel = (NetworkChannel)message.SequenceChannel;

            if (message.SequenceChannel < 0 || message.SequenceChannel > 32)
            {
                channel = NetworkChannel.LOGIN;
            }
            NetworkConnection connection = GetConnection(this, message);

            Debug.Log($"Network status changed {status.ToString()}");
            if (status == NetConnectionStatus.Connected)
            {
                OnConnectionCreate(this, message.SenderConnection);
            }
            if (status == NetConnectionStatus.Disconnected)
            {
                OnDisconnect(this, connection, message);
            }
            connection?.GetNetworkHandler(channel).OnStatusChange(status);
        }
Example #8
0
        internal static void Send(ulong clientId, byte messageType, NetworkChannel networkChannel, NetworkBuffer messageBuffer)
        {
            messageBuffer.PadBuffer();

            if (NetworkManager.Singleton.IsServer && clientId == NetworkManager.Singleton.ServerClientId)
            {
                return;
            }

            using (var buffer = MessagePacker.WrapMessage(messageType, messageBuffer))
            {
                NetworkProfiler.StartEvent(TickType.Send, (uint)buffer.Length, networkChannel, NetworkConstants.MESSAGE_NAMES[messageType]);

                NetworkManager.Singleton.NetworkConfig.NetworkTransport.Send(clientId, new ArraySegment <byte>(buffer.GetBuffer(), 0, (int)buffer.Length), networkChannel);
                ProfilerStatManager.BytesSent.Record((int)buffer.Length);
                PerformanceDataManager.Increment(ProfilerConstants.ByteSent, (int)buffer.Length);

#if !UNITY_2020_2_OR_NEWER
                NetworkProfiler.EndEvent();
#endif
            }
        }
Example #9
0
        private void AppendChannel(ref ArraySegment <byte> data, NetworkChannel channel)
        {
            Assert.IsNotNull(data.Array);

            var index = data.Offset + data.Count;
            var size  = index + 1;
            var array = data.Array;

            if (data.Array.Length < size)
            {
                if (size > m_MessageBuffer.Length)
                {
                    ResizeMessageBuffer(size);
                }

                array = m_MessageBuffer;
            }

            array[index] = (byte)channel;

            data = new ArraySegment <byte>(array, data.Offset, data.Count + 1);
        }
Example #10
0
        public void ShouldNotReceiveOnChildWhenSentToNetworkFromChild()
        {
            var childAddress = new NodeAddress("child");
            var localAddress = new NodeAddress("local");
            var data         = "Hello world";

            var child = new Mock <INode>();

            child.Setup(x => x.Address).Returns(childAddress);
            var network = new Mock <INetwork>();

            network.Setup(x => x.FindOrDefault(null)).Returns((INode)null);
            network.Setup(x => x.FindOrCreate(childAddress)).Returns(child.Object);
            network.Setup(x => x.FindOrDefault(childAddress)).Returns(child.Object);

            var local = new Node(localAddress, network.Object);

            local.Connect(childAddress);
            local.SendToNetwork(network.Object, typeof(string).ToString(), NetworkChannel <string> .Serialize(data), childAddress);

            child.Verify(x => x.Send(typeof(string).ToString(), It.IsAny <byte[]>(), It.IsAny <NodeAddress>()), Times.Never());
        }
Example #11
0
        private QueuedBlockMsg ReadUncompressedMsg(NetworkChannel netChan)
        {
            byte[]             networkReadWorkingBuf = this.m_networkReadWorkingBuf;
            GranularLogDataMsg granularLogDataMsg    = GranularLogDataMsg.ReadFromNet(netChan, networkReadWorkingBuf, 0);

            byte[] array = null;
            int    num   = 0;

            if (granularLogDataMsg.LogDataLength > 0)
            {
                this.GetAppendSpace(granularLogDataMsg.LogDataLength);
                array = this.m_currentBuffer.Buffer;
                num   = this.m_currentBuffer.AppendOffset;
                netChan.Read(array, num, granularLogDataMsg.LogDataLength);
                this.m_currentBuffer.AppendOffset = num + granularLogDataMsg.LogDataLength;
            }
            return(new QueuedBlockMsg(granularLogDataMsg.EmitContext, array, num, 0)
            {
                RequestAckCounter = granularLogDataMsg.RequestAckCounter,
                IOBuffer = this.m_currentBuffer
            });
        }
Example #12
0
        public string Execute(string jsonData)
        {
            Clear();

            // Connect
            NetworkChannel channel = new NetworkChannel(Connection);

            // Request
            JsonSearchRequestMessage jsonRequestMessage = new JsonSearchRequestMessage();
            JsonPacket  jsonRequest = new JsonPacket(jsonRequestMessage, jsonData);
            HttpRequest httpRequest = new HttpRequest()
            {
                Data = Session.Encrypt(jsonRequest)
            };

            // Response
            HttpResponse httpResponse;

            // NOTE: We need to lock this send/receive message pairs
            lock (Socket)
            {
                channel.Send(httpRequest);
                channel.Receive(out httpResponse);
            }

            Code = httpResponse.Code;

            if (httpResponse.Ok)
            {
                JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data));
#if DEBUG
                Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse);
#endif
                // Data
                return(jsonResponse.Data);
            }

            return(null);
        }
Example #13
0
        private QueuedBlockMsg ReadInputMessage(NetworkChannel netChan)
        {
            this.m_timeoutPending = false;
            byte[]         networkReadWorkingBuf = this.m_networkReadWorkingBuf;
            StopwatchStamp stamp = StopwatchStamp.GetStamp();
            NetworkChannelMessageHeader msgHdr = NetworkChannelMessage.ReadHeaderFromNet(netChan, networkReadWorkingBuf, 0);

            NetworkChannelMessage.MessageType messageType = msgHdr.MessageType;
            QueuedBlockMsg queuedBlockMsg;

            if (messageType != NetworkChannelMessage.MessageType.BlockModeCompressedData)
            {
                if (messageType == NetworkChannelMessage.MessageType.Ping)
                {
                    PingMessage pingMessage = PingMessage.ReadFromNet(netChan, networkReadWorkingBuf, 0);
                    long        systemPerformanceCounter = Win32StopWatch.GetSystemPerformanceCounter();
                    long        arg = Win32StopWatch.ComputeElapsedTimeInUSec(systemPerformanceCounter, pingMessage.ReplyAckCounter) / 1000L;
                    this.Copier.TrackLastContactTime(msgHdr.MessageUtc);
                    PassiveBlockMode.Tracer.TraceDebug <string, long>((long)this.GetHashCode(), "ProcessReadCallback({0}) received a ping after {1}ms, so channel is healthy", this.DatabaseName, arg);
                    return(null);
                }
                if (messageType != NetworkChannelMessage.MessageType.GranularLogData)
                {
                    throw new NetworkUnexpectedMessageException(netChan.PartnerNodeName, string.Format("Unknown Type {0}", msgHdr.MessageType));
                }
                queuedBlockMsg = this.ReadUncompressedMsg(netChan);
                this.Copier.PerfmonCounters.CompressionEnabled = 0L;
            }
            else
            {
                queuedBlockMsg = this.ReadCompressedMsg(netChan, msgHdr);
                this.Copier.PerfmonCounters.CompressionEnabled = 1L;
            }
            queuedBlockMsg.ReadDurationInTics = stamp.ElapsedTicks;
            queuedBlockMsg.MessageUtc         = msgHdr.MessageUtc;
            this.Copier.PerfmonCounters.RecordLogCopierNetworkReadLatency(queuedBlockMsg.ReadDurationInTics);
            return(queuedBlockMsg);
        }
Example #14
0
    void Initialize()
    {
        Debug.Log("Starting GameLogicChat");

        apg = new AudiencePlayersSys(this, recorder);

        if (UseSingleMachineTestNetworking)
        {
            IRCChat  = new NullNetwork();
            IRCLogic = new NullNetwork();
        }
        else
        {
            LoadNetworkSettings();

            IRCChat  = this.GetComponent <TwitchIRCChat>();
            IRCLogic = this.GetComponent <TwitchIRCLogic>();
        }
        IRCChat.SetOAuthFunc(() => settings.ChatOauth);
        IRCChat.SetChannelNameFunc(() => settings.ChatChannelName);
        IRCLogic.SetOAuthFunc(() => settings.LogicOauth);
        IRCLogic.SetChannelNameFunc(() => settings.LogicChannelName);
    }
Example #15
0
        private PassiveReadRequest StartRead()
        {
            NetworkChannel     netChannel         = this.m_netChannel;
            PassiveReadRequest passiveReadRequest = new PassiveReadRequest(this, netChannel);
            bool flag = false;

            try
            {
                if (!this.Copier.TestHungPassiveBlockMode)
                {
                    netChannel.StartRead(new NetworkChannelCallback(PassiveBlockMode.ReadCallback), passiveReadRequest);
                    flag = true;
                }
            }
            finally
            {
                if (!flag)
                {
                    PassiveBlockMode.Tracer.TraceError((long)this.GetHashCode(), "Failed to start async read");
                }
            }
            return(passiveReadRequest);
        }
        public void TestChannelPackerErrorEncode()
        {
            var fromClient = new byte[] { };

            using (var server = new TcpServer((data) =>
            {
                fromClient = Arr.Merge(fromClient, data);
            }))
            {
                var socket  = MakeEnv().Make <ISocketManager>().Make("tcp://127.0.0.1", "TestChannelPackerErrorEncode");
                var channel = new NetworkChannel(socket, new PackerError(PackerError.ErrorType.Encode), "TestChannelPackerErrorEncode");

                var wait  = channel.Connect("127.0.0.1", 7777);
                var count = 0;
                while (!wait.IsDone && count++ < 3000)
                {
                    Thread.Sleep(1);
                }
                try
                {
                    var isThrow = false;
                    try
                    {
                        channel.Send(Encoding.Default.GetBytes("helloworld"));
                    }
                    catch (RuntimeException)
                    {
                        isThrow = true;
                    }
                    Assert.AreEqual(true, isThrow);
                }
                finally
                {
                    channel.Disconnect();
                }
            }
        }
Example #17
0
        private QueuedBlockMsg ReadCompressedMsg(NetworkChannel netChan, NetworkChannelMessageHeader msgHdr)
        {
            byte[] networkReadWorkingBuf = this.m_networkReadWorkingBuf;
            BlockModeCompressedDataMsg blockModeCompressedDataMsg = BlockModeCompressedDataMsg.ReadFromNet(netChan, networkReadWorkingBuf, 0);

            byte[] array = null;
            int    num   = 0;
            int    num2  = 0;

            if (blockModeCompressedDataMsg.LogDataLength > 0)
            {
                this.GetAppendSpace(blockModeCompressedDataMsg.LogDataLength);
                array = this.m_currentBuffer.Buffer;
                num   = this.m_currentBuffer.AppendOffset;
                int num3 = blockModeCompressedDataMsg.LogDataLength;
                int num4 = num;
                foreach (int num5 in blockModeCompressedDataMsg.CompressedLengths)
                {
                    num2 += num5;
                    netChan.Read(networkReadWorkingBuf, 0, num5);
                    int num6 = Math.Min(num3, 65536);
                    if (!Xpress.Decompress(networkReadWorkingBuf, 0, num5, array, num4, num6))
                    {
                        throw new NetworkCorruptDataException(this.m_netChannel.PartnerNodeName);
                    }
                    num3 -= num6;
                    num4 += num6;
                }
                this.m_currentBuffer.AppendOffset = num + blockModeCompressedDataMsg.LogDataLength;
            }
            return(new QueuedBlockMsg(blockModeCompressedDataMsg.EmitContext, array, num, num2)
            {
                RequestAckCounter = blockModeCompressedDataMsg.RequestAckCounter,
                IOBuffer = this.m_currentBuffer
            });
        }
Example #18
0
        /// <summary>
        /// 지정된 NetworkChannel만을 생성하고 네트워킹을 시작합니다.
        /// sessionGenerator가 지정되기 때문에 config file에 정의된 sessionClass, receiveBufferSize는 무시됩니다.
        /// </summary>
        /// <param name="networkChannelName">시작할 NetworkChannel 이름</param>
        /// <param name="sessionGenerator">Session 객체를 생성하는 Delegator</param>
        /// <returns>해당 NetworkChannel 객체</returns>
        public static NetworkChannel StartNetwork(String networkChannelName, SessionGenerateDelegator sessionGenerator)
        {
            ConfigNetworkChannel config = _listNetworkConfig.Find(v => v.NetworkChannelName == networkChannelName);

            if (config == null)
            {
                throw new AegisException(AegisResult.InvalidArgument, "Invalid NetworkChannel name({0}).", networkChannelName);
            }


            NetworkChannel channel = NetworkChannel.CreateChannel(config.NetworkChannelName);

            if (config.ListenIpAddress.Length == 0 || config.ListenPortNo == 0)
            {
                channel.StartNetwork(sessionGenerator, config.InitSessionPoolCount, config.MaxSessionPoolCount);
            }
            else
            {
                channel.StartNetwork(sessionGenerator, config.InitSessionPoolCount, config.MaxSessionPoolCount)
                .OpenListener(config.ListenIpAddress, config.ListenPortNo);
            }

            return(channel);
        }
Example #19
0
        /// <summary>
        /// 创建网络频道。
        /// </summary>
        /// <param name="name">网络频道名称。</param>
        /// <returns>要创建的网络频道。</returns>
        public INetworkChannel CreateNetworkChannel(string name)
        {
            if (m_NetworkHelper == null)
            {
                throw new GameFrameworkException("You must set network helper first.");
            }

            if (HasNetworkChannel(name))
            {
                throw new GameFrameworkException(string.Format("Already exist network channel '{0}'.", name ?? string.Empty));
            }

            NetworkChannel networkChannel = new NetworkChannel(name, m_NetworkHelper);

            networkChannel.NetworkChannelConnected     += OnNetworkChannelConnected;
            networkChannel.NetworkChannelClosed        += OnNetworkChannelClosed;
            networkChannel.NetworkChannelSended        += OnNetworkChannelSended;
            networkChannel.NetworkChannelReceived      += OnNetworkChannelReceived;
            networkChannel.NetworkChannelMissHeartBeat += OnNetworkChannelMissHeartBeat;
            networkChannel.NetworkChannelError         += OnNetworkChannelError;
            networkChannel.NetworkChannelCustomError   += OnNetworkChannelCustomError;
            m_NetworkChannels.Add(name, networkChannel);
            return(networkChannel);
        }
Example #20
0
        internal BlockModeCompressedDataMsg(NetworkChannel channel, byte[] packetContent) : base(channel, NetworkChannelMessage.MessageType.BlockModeCompressedData, packetContent)
        {
            this.FlagsUsed         = (BlockModeCompressedDataMsg.Flags)base.Packet.ExtractInt64();
            this.RequestAckCounter = base.Packet.ExtractInt64();
            this.LogDataLength     = base.Packet.ExtractInt32();
            if (this.LogDataLength > 1048576)
            {
                throw new NetworkCorruptDataException(channel.PartnerNodeName);
            }
            this.EmitContext                       = new JET_EMITDATACTX();
            this.EmitContext.cbLogData             = (long)this.LogDataLength;
            this.EmitContext.dwVersion             = base.Packet.ExtractInt32();
            this.EmitContext.qwSequenceNum         = base.Packet.ExtractUInt64();
            this.EmitContext.grbitOperationalFlags = (ShadowLogEmitGrbit)base.Packet.ExtractUInt32();
            this.EmitContext.logtimeEmit           = base.Packet.ExtractDateTime();
            JET_LGPOS lgposLogData = default(JET_LGPOS);

            lgposLogData.lGeneration      = base.Packet.ExtractInt32();
            lgposLogData.isec             = (int)base.Packet.ExtractUInt16();
            lgposLogData.ib               = (int)base.Packet.ExtractUInt16();
            this.EmitContext.lgposLogData = lgposLogData;
            if (this.LogDataLength > 0)
            {
                int num = BlockModeCompressedDataMsg.CalculateBlockCount(this.LogDataLength);
                this.CompressedLengths = new int[num];
                for (int i = 0; i < num; i++)
                {
                    int num2 = base.Packet.ExtractInt32();
                    if (num2 <= 0 || num2 > 65536)
                    {
                        throw new NetworkCorruptDataException(channel.PartnerNodeName);
                    }
                    this.CompressedLengths[i] = num2;
                }
            }
        }
Example #21
0
        public void ShouldReceiveOnParentWhenSent()
        {
            var parentAddress = new NodeAddress("parent");
            var localAddress  = new NodeAddress("local")
            {
                Parent = parentAddress
            };
            var data = NetworkChannel <string> .Serialize("Hello world");

            var parent = new Mock <INode>();

            parent.Setup(x => x.Address).Returns(parentAddress);
            var network = new Mock <INetwork>();

            network.Setup(x => x.FindOrDefault(null)).Returns((INode)null);
            network.Setup(x => x.FindOrCreate(parentAddress)).Returns(parent.Object);
            network.Setup(x => x.FindOrDefault(parentAddress)).Returns(parent.Object);

            var local = new Node(localAddress, network.Object);

            local.Send(typeof(string).ToString(), data, null);

            parent.Verify(x => x.Send(typeof(string).ToString(), data, It.IsAny <NodeAddress>()), Times.Once());
        }
Example #22
0
 internal SeedPageReaderSinglePageRequest(NetworkChannel channel, byte[] packetContent) : base(channel, NetworkChannelMessage.MessageType.SeedPageReaderSinglePageRequest, packetContent)
 {
     this.m_databaseName = base.Packet.ExtractString();
     this.m_databasePath = base.Packet.ExtractString();
     this.m_pageno       = base.Packet.ExtractUInt32();
 }
Example #23
0
 // Token: 0x060017B1 RID: 6065 RVA: 0x00061EC5 File Offset: 0x000600C5
 internal NetworkChannelFileTransferReply(NetworkChannel channel, NetworkChannelMessage.MessageType msgType, byte[] packetContent) : base(channel, msgType, packetContent)
 {
     this.FileSize     = base.Packet.ExtractInt64();
     this.LastWriteUtc = base.Packet.ExtractDateTime();
     this.DataEncoding = (NetworkChannel.DataEncodingScheme)base.Packet.ExtractUInt32();
 }
Example #24
0
 internal SeedPageReaderSinglePageRequest(NetworkChannel channel, Guid databaseGuid, string databaseName, string databasePath, uint pageno) : base(channel, NetworkChannelMessage.MessageType.SeedPageReaderSinglePageRequest, databaseGuid)
 {
     this.m_databaseName = databaseName;
     this.m_databasePath = databasePath;
     this.m_pageno       = pageno;
 }
 public PassiveReadRequest(PassiveBlockMode mgr, NetworkChannel channel)
 {
     this.Channel = channel;
     this.Manager = mgr;
 }
Example #26
0
 // Token: 0x060017AF RID: 6063 RVA: 0x00061E79 File Offset: 0x00060079
 internal NetworkChannelFileTransferReply(NetworkChannel channel, NetworkChannelMessage.MessageType msgType) : base(channel, msgType)
 {
     this.m_dataEncoding = NetworkChannel.DataEncodingScheme.Uncompressed;
 }
Example #27
0
        public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment <byte> payload, out float receiveTime)
        {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
            s_PollEvent.Begin();
#endif
            try
            {
                Event @event;

                if (host.CheckEvents(out @event) <= 0)
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Service.Begin();
#endif
                    try
                    {
                        if (hasServiced || host.Service(0, out @event) <= 0)
                        {
                            clientId    = 0;
                            channel     = 0;
                            payload     = new ArraySegment <byte>();
                            receiveTime = Time.realtimeSinceStartup;

                            return(NetworkEvent.Nothing);
                        }
                        hasServiced = true;
                    }
                    finally
                    {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                        s_Service.End();
#endif
                    }
                }

                clientId = GetMLAPIClientId(@event.Peer.ID, false);

                switch (@event.Type)
                {
                case EventType.Connect:
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Connect.Begin();
#endif
                    channel     = 0;
                    payload     = new ArraySegment <byte>();
                    receiveTime = Time.realtimeSinceStartup;

                    connectedEnetPeers.Add(@event.Peer.ID, @event.Peer);

                    @event.Peer.PingInterval(PingInterval);
                    @event.Peer.Timeout(TimeoutLimit, TimeoutMinimum, TimeoutMaximum);

                    if (connectTask != null)
                    {
                        connectTask.Success = true;
                        connectTask.IsDone  = true;
                        connectTask         = null;
                    }
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Connect.End();
#endif
                    return(NetworkEvent.Connect);
                }

                case EventType.Disconnect:
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Disconnect.Begin();
#endif
                    channel     = 0;
                    payload     = new ArraySegment <byte>();
                    receiveTime = Time.realtimeSinceStartup;

                    connectedEnetPeers.Remove(@event.Peer.ID);

                    if (connectTask != null)
                    {
                        connectTask.Success = false;
                        connectTask.IsDone  = true;
                        connectTask         = null;
                    }
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Disconnect.End();
#endif
                    return(NetworkEvent.Disconnect);
                }

                case EventType.Receive:
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Receive.Begin();
#endif
                    channel     = channelIdToName[@event.ChannelID];
                    receiveTime = Time.realtimeSinceStartup;
                    int size = @event.Packet.Length;

                    if (size > messageBuffer.Length)
                    {
                        byte[] tempBuffer;

                        if (temporaryBufferReference != null && temporaryBufferReference.IsAlive && ((byte[])temporaryBufferReference.Target).Length >= size)
                        {
                            tempBuffer = (byte[])temporaryBufferReference.Target;
                        }
                        else
                        {
                            tempBuffer = new byte[size];
                            temporaryBufferReference = new WeakReference(tempBuffer);
                        }

                        @event.Packet.CopyTo(tempBuffer);
                        payload = new ArraySegment <byte>(tempBuffer, 0, size);
                    }
                    else
                    {
                        @event.Packet.CopyTo(messageBuffer);
                        payload = new ArraySegment <byte>(messageBuffer, 0, size);
                    }

                    @event.Packet.Dispose();
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Receive.End();
#endif
                    return(NetworkEvent.Data);
                }

                case EventType.Timeout:
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Timeout.Begin();
#endif
                    channel     = 0;
                    payload     = new ArraySegment <byte>();
                    receiveTime = Time.realtimeSinceStartup;

                    connectedEnetPeers.Remove(@event.Peer.ID);
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_Timeout.End();
#endif
                    return(NetworkEvent.Disconnect);
                }

                case EventType.None:
                default:
                {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_NoEvent.Begin();
#endif
                    channel     = 0;
                    payload     = new ArraySegment <byte>();
                    receiveTime = Time.realtimeSinceStartup;
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                    s_NoEvent.End();
#endif
                    return(NetworkEvent.Nothing);
                }
                }
            }
            finally
            {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
                s_PollEvent.End();
#endif
            }
        }
        public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment <byte> payload, out float receiveTime)
        {
            var eventType = RelayTransport.Receive(out int hostId, out int connectionId, out int channelId, m_MessageBuffer, m_MessageBuffer.Length, out int receivedSize, out byte error);

            clientId    = GetMLAPIClientId((byte)hostId, (ushort)connectionId, false);
            receiveTime = UnityEngine.Time.realtimeSinceStartup;

            var networkError = (NetworkError)error;

            if (networkError == NetworkError.MessageToLong)
            {
                byte[] tempBuffer;

                if (m_TemporaryBufferReference != null && m_TemporaryBufferReference.IsAlive && ((byte[])m_TemporaryBufferReference.Target).Length >= receivedSize)
                {
                    tempBuffer = (byte[])m_TemporaryBufferReference.Target;
                }
                else
                {
                    tempBuffer = new byte[receivedSize];
                    m_TemporaryBufferReference = new WeakReference(tempBuffer);
                }

                eventType = RelayTransport.Receive(out hostId, out connectionId, out channelId, tempBuffer, tempBuffer.Length, out receivedSize, out error);
                payload   = new ArraySegment <byte>(tempBuffer, 0, receivedSize);
            }
            else
            {
                payload = new ArraySegment <byte>(m_MessageBuffer, 0, receivedSize);
            }

            if (m_ChannelIdToName.TryGetValue(channelId, out NetworkChannel value))
            {
                networkChannel = value;
            }
            else
            {
                networkChannel = NetworkChannel.Internal;
            }

            if (m_ConnectTask != null && hostId == m_ServerHostId && connectionId == m_ServerConnectionId)
            {
                if (eventType == NetworkEventType.ConnectEvent)
                {
                    // We just got a response to our connect request.
                    m_ConnectTask.Message            = null;
                    m_ConnectTask.SocketError        = networkError == NetworkError.Ok ? System.Net.Sockets.SocketError.Success : System.Net.Sockets.SocketError.SocketError;
                    m_ConnectTask.State              = null;
                    m_ConnectTask.Success            = networkError == NetworkError.Ok;
                    m_ConnectTask.TransportCode      = (byte)networkError;
                    m_ConnectTask.TransportException = null;
                    m_ConnectTask.IsDone             = true;

                    m_ConnectTask = null;
                }
                else if (eventType == NetworkEventType.DisconnectEvent)
                {
                    // We just got a response to our connect request.
                    m_ConnectTask.Message            = null;
                    m_ConnectTask.SocketError        = System.Net.Sockets.SocketError.SocketError;
                    m_ConnectTask.State              = null;
                    m_ConnectTask.Success            = false;
                    m_ConnectTask.TransportCode      = (byte)networkError;
                    m_ConnectTask.TransportException = null;
                    m_ConnectTask.IsDone             = true;

                    m_ConnectTask = null;
                }
            }

            if (networkError == NetworkError.Timeout)
            {
                // In UNET. Timeouts are not disconnects. We have to translate that here.
                eventType = NetworkEventType.DisconnectEvent;
            }

            // Translate NetworkEventType to NetEventType
            switch (eventType)
            {
            case NetworkEventType.DataEvent:
                return(NetworkEvent.Data);

            case NetworkEventType.ConnectEvent:
                return(NetworkEvent.Connect);

            case NetworkEventType.DisconnectEvent:
                return(NetworkEvent.Disconnect);

            case NetworkEventType.Nothing:
                return(NetworkEvent.Nothing);

            case NetworkEventType.BroadcastEvent:
                return(NetworkEvent.Nothing);
            }

            return(NetworkEvent.Nothing);
        }
 // Token: 0x060019EE RID: 6638 RVA: 0x0006C6D4 File Offset: 0x0006A8D4
 internal CancelCiFileReply(NetworkChannel channel, byte[] packetContent) : base(channel, NetworkChannelMessage.MessageType.CancelCiFileReply, packetContent)
 {
 }
 // Token: 0x060019ED RID: 6637 RVA: 0x0006C6C6 File Offset: 0x0006A8C6
 internal CancelCiFileReply(NetworkChannel channel) : base(channel, NetworkChannelMessage.MessageType.CancelCiFileReply)
 {
 }
Example #31
0
 public ServerConnection(string ip, int port)
 {
     this.server = new NetworkChannel (ip, port);
     this.server.SetNotifier (this);
     this.server.Start ();
 }