コード例 #1
0
 private void EnqueueEvent(NetEvent evt)
 {
     if (UnsyncedEvents)
     {
         ProcessEvent(evt);
     }
     else
     {
         lock (_netEventsQueue)
         {
             _netEventsQueue.Enqueue(evt);
         }
     }
 }
コード例 #2
0
ファイル: NetManager.cs プロジェクト: DevJoy77/FastNetLib
        private NetEvent CreateEvent(NetEventType type)
        {
            NetEvent evt = null;

            if (_netEventsPool.Count > 0)
            {
                evt = _netEventsPool.Pop();
            }
            if (evt == null)
            {
                evt = new NetEvent();
            }
            evt.Type = type;
            return(evt);
        }
コード例 #3
0
        private void DoTimeoutBeginConnect(Socket socket, EndPoint endPoint)
        {
            IAsyncResult result = socket.BeginConnect(endPoint, OnSocketAsyncConnectFinish, socket);

            if (this.socketConnectTimeOutMSec > 0 && result.AsyncWaitHandle.WaitOne(this.socketConnectTimeOutMSec, true) == false)
            {
                socket.Close();
                NetEvent evt = this.netEventPool.GetObject();
                evt.type = NetEventType.PeerConnectTimeOut;
                evt.data = new SocketException((int)SocketError.TimedOut).Message;
                NetCommand cmd = this.netCommandPool.GetObject();
                cmd.type = NetCommandType.NetEventProxy;
                cmd.data = evt;
                this.netCommandQueue.Enqueue(cmd);
            }
        }
コード例 #4
0
 void NetEventFailedToConnect(NetEvent net_event)
 {
     if (state_ == State.JOINING)
     {
         if (net_event.error() == NetworkConnectionError.InvalidPassword)
         {
             SetState(State.JOIN_PASSWORD);
         }
         else
         {
             display_err_ = "" + net_event.error();
             SetState(State.JOIN_FAIL);
         }
     }
     ConsoleScript.Log("Failed to connect: " + net_event.error());
 }
コード例 #5
0
    void NetEventDisconnectedFromServer(NetEvent net_event)
    {
        switch (net_event.network_disconnection())
        {
        case NetworkDisconnection.Disconnected:
            ConsoleScript.Log("Cleanly disconnected from server");
            break;

        case NetworkDisconnection.LostConnection:
            ConsoleScript.Log("Connection to server was lost unexpectedly");
            break;
        }
        if (state_ == State.NONE || state_ == State.JOIN_SUCCESS || state_ == State.JOINING)
        {
            Application.LoadLevel(Application.loadedLevel);
        }
    }
コード例 #6
0
        private void OnConnected(NetEvent evt)
        {
            Log.Debug("I'm connected!");
            _currentState = State.Playing;
            Client        = new GameClient(evt.Peer, false);

            GameObject playerObj = Object.Instantiate(PlayerPrefab);

            ControlledObject pco = new UccControlledObject
            {
                Entity           = playerObj,
                PlayerController = playerObj.GetComponent <CharacterController>(),
                PLocomotion      = playerObj.GetComponent <UltimateCharacterLocomotion>()
            };

            Client.ControlledObjectSys.CurrentlyControlledObject = pco;
        }
コード例 #7
0
    public Queue <string[]> moveQueue = new Queue <string[]>();                             // 移动消息队列

    void Start()
    {
        ConfigManager <Gun> cm = new ConfigManager <Gun>();
        Gun gun = cm.GetConfig(2);

        print(gun.ID + " - " + gun.Name);

        PlayerParent = GameObject.Find("PlayerList").transform;
        NetEvent.AddEvent(list, netEventEnum.List);
        NetEvent.AddEvent(leave, netEventEnum.Leave);
        NetEvent.AddEvent(move, netEventEnum.Move);
        GetListProto glp = new GetListProto();

        glp.Timestamp = Tool.GetTimestamp();
        string str = JsonUtility.ToJson(glp);

        NetManager.Instance.Send(netEventEnum.GetList, str);
    }
コード例 #8
0
ファイル: GameClient.cs プロジェクト: ghostorange/Evolution
    public void OnNetworkReceive(NetPeer peer, NetDataReader reader, DeliveryMethod deliveryMethod)
    {
        //      byte[] raw = new byte[reader.AvailableBytes];
        //reader.GetBytes (raw, reader.AvailableBytes);
        //string str = System.Text.Encoding.ASCII.GetString (raw);
        //ClientInput input = new ClientInput ();
        //input.DecodeRawDataFromeString (str);

        //      if (input.ClinetID == _netClient.LocalPort) {
        //          Debug.Log("[YOU]  inputed>" + input.ToString());
        //      } else {
        //          Debug.Log("[OTHER]  inputed>"+ input.ToString());
        //      }
        byte[] raw = new byte[reader.AvailableBytes];
        reader.GetBytes(raw, reader.AvailableBytes);
        string str = NetdataUltility.DecodeRaw(raw);

        NetdataUltility.NetdataType dataType = NetdataUltility.NetdataType.UnknownData;
        string decoded = "";

        dataType = NetdataUltility.DepacketData(str, out decoded);
        switch (dataType)
        {
        case NetdataUltility.NetdataType.EventData:
            NetEvent nEvent = new NetEvent();
            nEvent.Decode(decoded);
            OnNetEvent(nEvent);
            break;

        case NetdataUltility.NetdataType.PlayerInputData:
            ClientInput cInput = new ClientInput();
            cInput.Decode(decoded);
            ExecuteInpute(cInput);
            break;

        case NetdataUltility.NetdataType.SyncableData:
            break;

        case NetdataUltility.NetdataType.UnknownData:
            //Maybe drop this data ??
            Debug.Log("[GameClient] receved a unknownData form server !");
            break;
        }
    }
コード例 #9
0
        private void OnSocketAsyncReceiveFinish(IAsyncResult result)
        {
            SocketReceiveStateObject stateObj = (SocketReceiveStateObject)result.AsyncState;
            Socket socket    = stateObj.socket;
            int    readBytes = 0;

            try
            {
                readBytes = socket.EndReceive(result);
            }
            catch (ObjectDisposedException)
            {
                return;
            }
            catch (Exception e)
            {
                NetEvent evt = this.netEventPool.GetObject();
                evt.type = NetEventType.NetWorkError;
                evt.data = e.Message;
                NetCommand cmd = this.netCommandPool.GetObject();
                cmd.type = NetCommandType.NetEventProxy;
                cmd.data = evt;
                this.netCommandQueue.Enqueue(cmd);
                return;
            }
            if (readBytes == 0)
            {
                NetEvent evt = this.netEventPool.GetObject();
                evt.type = NetEventType.PeerClose;
                NetCommand cmd = this.netCommandPool.GetObject();
                cmd.type = NetCommandType.NetEventProxy;
                cmd.data = evt;
                this.netCommandQueue.Enqueue(cmd);
            }
            else
            {
                NetEvent evt = this.netEventPool.GetObject();
                evt.type = NetEventType.RecvMessage;
                evt.data = new byte[readBytes];
                Buffer.BlockCopy(stateObj.buffer, 0, (byte[])evt.data, 0, readBytes);
                this.netEventQueue.Enqueue(evt);
                socket.BeginReceive(stateObj.buffer, 0, stateObj.buffer.Length, SocketFlags.None, OnSocketAsyncReceiveFinish, stateObj);
            }
        }
コード例 #10
0
 // 需要外部循环调用的
 // 消息下发(主线程)
 public static void Update()
 {
     // 从消息列表中获取消息
     if (NetManager.MessageQueue.Count > 0)
     {
         string[] item = null;
         lock (NetManager.MessageQueue) {
             item = NetManager.MessageQueue.Peek();
         }
         string type = item[0];
         string msg  = item[1];
         UILog.log.Add("接收到的消息:" + msg);
         BaseProto date = JsonUtility.FromJson(msg, Type.GetType(type)) as BaseProto;
         NetEvent.SendEvent((netEventEnum)date.protoType, date.returnFun()); // 发送事件
         lock (NetManager.MessageQueue) {
             NetManager.MessageQueue.Dequeue();
         }
         UILog.log.Add("接收到的消息类型:" + date.protoType);
     }
 }
コード例 #11
0
ファイル: NetManager.cs プロジェクト: ntl92bk/SpeedDate
        private NetEvent CreateEvent(NetEventType type)
        {
            NetEvent evt = null;

            if (type == NetEventType.Connect)
            {
                _connectedPeersCount++;
            }
            lock (_netEventsPool)
            {
                if (_netEventsPool.Count > 0)
                {
                    evt = _netEventsPool.Pop();
                }
            }
            if (evt == null)
            {
                evt = new NetEvent();
            }
            evt.Type = type;
            return(evt);
        }
コード例 #12
0
        private void OnNetEvent(NetEvent evt)
        {
            Log.Debug($"NetEvent: {evt.Type} ");
            switch (evt.Type)
            {
            case NetEvent.EType.Connect:
                OnConnected(evt);
                break;

            case NetEvent.EType.Receive:
                Client.PacketStream.AddDataReceivedEvent(evt);
                break;

            case NetEvent.EType.Disconnect:
                break;

            case NetEvent.EType.ReceiveUnconnected:
                break;

            case NetEvent.EType.Error:
                break;

            case NetEvent.EType.ConnectionLatencyUpdated:
                break;

            case NetEvent.EType.DiscoveryRequest:
                break;

            case NetEvent.EType.DiscoveryResponse:
                break;

            case NetEvent.EType.ConnectionRequest:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #13
0
        private void React(NetEvent evt)
        {
            switch (evt.Type)
            {
            case NetEvent.EType.ConnectionRequest:
                evt.ConnectionRequest.Accept();     // who needs security
                break;

            case NetEvent.EType.Connect:
                HandleNewConnection(evt);
                break;

            case NetEvent.EType.Receive:
                HandleNetworkReceive(evt);
                break;

            case NetEvent.EType.Disconnect:
                break;

            case NetEvent.EType.ReceiveUnconnected:
                break;

            case NetEvent.EType.Error:
                break;

            case NetEvent.EType.ConnectionLatencyUpdated:
                break;

            case NetEvent.EType.DiscoveryRequest:
                break;

            case NetEvent.EType.DiscoveryResponse:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #14
0
ファイル: TestNetEncoding.cs プロジェクト: ztxyzu/MiniUDP
        public void TestNotificationPack()
        {
            int headerSize = NetEncoding.NOTIFICATION_HEADER_SIZE;
            int maxPack    = NetEncoding.MAX_NOTIFICATION_PACK;
            int halfPack   = (maxPack / 2) - headerSize;

            NetEvent evnt1 = CreateFilled(NetConfig.DATA_MAXIMUM);
            NetEvent evnt2 = CreateFilled(halfPack);
            NetEvent evnt3 = CreateFilled(halfPack);
            NetEvent evnt4 = CreateFilled(halfPack + 1);

            // The buffer should fit this notification exactly.
            TestNetEncoding.TestNotificationCase(maxPack, 1, evnt1);

            // The buffer should fit these two notifications exactly.
            TestNetEncoding.TestNotificationCase(maxPack, 2, evnt2, evnt3);

            // The second notification should be one byte too big for the buffer.
            TestNetEncoding.TestNotificationCase(halfPack + headerSize, 1, evnt3, evnt4);

            // We should pack no bytes and read no notifications for this.
            TestNetEncoding.TestNotificationCase(0, 0);
        }
コード例 #15
0
ファイル: ModalUIModel.cs プロジェクト: 6a/robot-rumble
        private void OnNetworkEvent(NetEvent nevent)
        {
            switch (nevent)
            {
            case NetEvent.ConnectedToMaster:
            {
                SetState(ModalState.SearchingForGame);
                break;
            }

            case NetEvent.ConnectedToLobby:
            {
                break;
            }

            case NetEvent.RoomListUpdated:
            {
                break;
            }

            case NetEvent.CreatedRoom:
            {
                break;
            }

            case NetEvent.JoinedRoom:
            {
                SetState(ModalState.WaitingForPlayers);
                break;
            }
            }

            if (Models.Get <INetworkModel>().CurrentErrorMessage != string.Empty)
            {
                EventDispatcher.Broadcast(Notification, Models.Get <INetworkModel>().CurrentErrorMessage);
            }
        }
コード例 #16
0
        private void NetNodeOnEventReceived(object sender, EventArgs e)
        {
            if (sender is ProcNetNode node && e is EventReceivedArgs args)
            {
                NetEvent evt = JsonConvert.DeserializeObject <NetEvent>(args.Message);

                if (evt != null)
                {
                    int sourcePort = node.Port;

                    int amount = _expectedConnections.RemoveAll(m => m.Key == sourcePort && m.Value == evt.Peer.Port);

                    if (amount > 0)
                    {
                        Console.WriteLine($"Removed: {sourcePort} - {evt.Peer.Port}");
                    }

                    if (!_expectedConnections.Any())
                    {
                        Program.testSuccessEvent.Set();
                    }
                }
            }
        }
コード例 #17
0
ファイル: NetBase.cs プロジェクト: RevenantX/LiteNetLib
 protected void EnqueueEvent(NetEvent evt)
 {
     if (UnsyncedEvents)
     {
         ProcessEvent(evt);
     }
     else
     {
         lock (_netEventsQueue)
         {
             _netEventsQueue.Enqueue(evt);
         }
     }
 }
コード例 #18
0
ファイル: NetBase.cs プロジェクト: RevenantX/LiteNetLib
        protected NetEvent CreateEvent(NetEventType type)
        {
            NetEvent evt = null;

            lock (_netEventsPool)
            {
                if (_netEventsPool.Count > 0)
                {
                    evt = _netEventsPool.Pop();
                }
            }
            if(evt == null)
            {
                evt = new NetEvent {DataReader = new NetDataReader()};
            }
            evt.Type = type;
            return evt;
        }
コード例 #19
0
ファイル: NetBase.cs プロジェクト: RevenantX/LiteNetLib
        private void ProcessEvent(NetEvent evt)
        {
            switch (evt.Type)
            {
                case NetEventType.Connect:
                    _netEventListener.OnPeerConnected(evt.Peer);
                    break;
                case NetEventType.Disconnect:
                    _netEventListener.OnPeerDisconnected(evt.Peer, evt.DisconnectReason, evt.AdditionalData);
                    break;
                case NetEventType.Receive:
                    _netEventListener.OnNetworkReceive(evt.Peer, evt.DataReader);
                    break;
                case NetEventType.ReceiveUnconnected:
                    _netEventListener.OnNetworkReceiveUnconnected(evt.RemoteEndPoint, evt.DataReader, UnconnectedMessageType.Default);
                    break;
                case NetEventType.DiscoveryRequest:
                    _netEventListener.OnNetworkReceiveUnconnected(evt.RemoteEndPoint, evt.DataReader, UnconnectedMessageType.DiscoveryRequest);
                    break;
                case NetEventType.DiscoveryResponse:
                    _netEventListener.OnNetworkReceiveUnconnected(evt.RemoteEndPoint, evt.DataReader, UnconnectedMessageType.DiscoveryResponse);
                    break;
                case NetEventType.Error:
                    _netEventListener.OnNetworkError(evt.RemoteEndPoint, evt.AdditionalData);
                    break;
                case NetEventType.ConnectionLatencyUpdated:
                    _netEventListener.OnNetworkLatencyUpdate(evt.Peer, evt.AdditionalData);
                    break;
            }

            //Recycle
            evt.DataReader.Clear();
            evt.Peer = null;
            evt.AdditionalData = 0;
            evt.RemoteEndPoint = null;

            lock (_netEventsPool)
            {
                _netEventsPool.Push(evt);
            }
        }
コード例 #20
0
 public void Update()
 {
     for (;;)
     {
         NetEvent evt = null;
         if (this.netEventQueue.TryDequeue(ref evt) == false)
         {
             break;
         }
         if (evt.type == NetEventType.ActiveClose)
         {
             this.GotoStatusConnected();
             if (this.disconnectCb != null)
             {
                 this.disconnectCb(true, "");
             }
         }
         else if (evt.type == NetEventType.PeerCantConnect)
         {
             this.GotoStatusDisconnected();
             if (this.connectCb != null)
             {
                 this.connectCb(false, (string)evt.data);
             }
         }
         else if (evt.type == NetEventType.PeerConnectTimeOut)
         {
             if (this.status == StatusType.Connecting)
             {
                 this.GotoStatusDisconnected();
                 if (this.connectCb != null)
                 {
                     this.connectCb(false, (string)evt.data);
                 }
             }
         }
         else if (evt.type == NetEventType.PeerConnected)
         {
             this.GotoStatusConnected();
             if (this.connectCb != null)
             {
                 this.connectCb(true, "");
             }
         }
         else if (evt.type == NetEventType.PeerClose)
         {
             this.GotoStatusDisconnected();
             if (this.disconnectCb != null)
             {
                 this.disconnectCb(false, "");
             }
         }
         else if (evt.type == NetEventType.RecvMessage)
         {
             if (this.recvMessageCb != null)
             {
                 this.recvMessageCb((byte[])evt.data);
             }
         }
         else if (evt.type == NetEventType.NetWorkError)
         {
             this.GotoStatusConnected();
             if (this.disconnectCb != null)
             {
                 this.disconnectCb(false, (string)evt.data);
             }
         }
         this.ReturnNetEventObject(evt);
     }
 }
コード例 #21
0
 // Update is called once per frame
 void Update()
 {
     NetEvent.ProcessOut();
 }
 void NetEventDisconnectedFromServer(NetEvent net_event)
 {
     switch(net_event.network_disconnection()){
         case NetworkDisconnection.Disconnected:
             ConsoleScript.Log("Proprement deconnecte du serveur");
             break;
         case NetworkDisconnection.LostConnection:
             ConsoleScript.Log("La connexion au serveur a ete perdue de maniere inattendue");
             break;
     }
     if(state_ == State.NONE || state_ == State.JOIN_SUCCESS || state_ == State.JOINING){
         Application.LoadLevel(Application.loadedLevel);
     }
 }
 void NetEventMasterServerEvent(NetEvent net_event)
 {
     switch(net_event.master_server_event()){
         case MasterServerEvent.HostListReceived:
             ConsoleScript.Log("Reçu une liste d'hôtes depuis le serveur maître.");
             if(queued_join_game_name_.Length > 0){
                 JoinHostListGameByName(queued_join_game_name_);
                 queued_join_game_name_ = "";
             }
             break;
         case MasterServerEvent.RegistrationFailedGameName:
             ConsoleScript.Log("L'enregistrement a echoue car un nom de jeu vide a ete donne.");
             break;
         case MasterServerEvent.RegistrationFailedGameType:
             ConsoleScript.Log("L'enregistrement a echoue car un type de jeu vide a ete donne.");
             break;
         case MasterServerEvent.RegistrationFailedNoServer:
             ConsoleScript.Log("L'enregistrement a echoue car aucun serveur n'est en jeu.");
             break;
         case MasterServerEvent.RegistrationSucceeded:
             ConsoleScript.Log("L'enregistrement au serveur maitre a reussi, confirmation recue.");
             break;
     }
 }
コード例 #24
0
 // 销毁
 private void OnDisable()
 {
     NetEvent.DelEvent(list, netEventEnum.List);
     NetEvent.DelEvent(leave, netEventEnum.Leave);
     NetEvent.DelEvent(move, netEventEnum.Move);
 }
コード例 #25
0
ファイル: NetPeer.cs プロジェクト: ashoulson/MiniUDP
        /// <summary>
        /// Queues a new notification to be send out reliably during ticks.
        /// </summary>
        internal bool QueueNotification(NetEvent data)
        {
            int notificationCount = this.outgoing.Count;
              if (notificationCount >= NetConfig.MaxPendingNotifications)
              {
            NetDebug.LogError("Notification queue full");
            return false;
              }

              data.Sequence = this.notificationSeq++;
              this.outgoing.Enqueue(data);
              return true;
        }
コード例 #26
0
 public void Enqueue(NetEvent <INetClient> e)
 {
     Mut.WaitOne();
     Queue.Enqueue(e);
     Mut.ReleaseMutex();
 }
コード例 #27
0
ファイル: Connection.cs プロジェクト: yahyaguzide/daud
        public async Task StepAsync(CancellationToken cancellationToken)
        {
            try
            {
                if (player != null)
                {
                    var builder = new FlatBufferBuilder(1);

                    lock (world.Bodies) // wrong kind of lock but might do for now
                    {
                        // First try to focus camera on the player if they have
                        // a fleet alive;
                        var followFleet = player?.Fleet;

                        // if the player doesn't have a fleet alive
                        if (followFleet == null)
                        {
                            // check to see if they are spectating a fleet that's alive
                            if (SpectatingFleet != null && SpectatingFleet.Exists)
                            {
                                followFleet = SpectatingFleet;
                            }
                        }

                        if (followFleet == null)
                        {
                            // find someone else to watch
                            followFleet = Player.GetWorldPlayers(world)
                                          .ToList()
                                          .Where(p => p.IsAlive)
                                          .OrderByDescending(p => p.Score * 10000 + (10000 - p.Fleet?.ID ?? 0))
                                          .FirstOrDefault()
                                          ?.Fleet;
                        }

                        Body followBody = null;

                        // if we're watching a fleet, watch the center of their fleet
                        if (followFleet != null)
                        {
                            if (world.Hook.FollowFirstShip)
                            {
                                followBody = followFleet.Ships.FirstOrDefault();
                            }
                            else
                            {
                                var center = FleetMath.FleetCenterNaive(followFleet.Ships);
                                followBody = new Body
                                {
                                    DefinitionTime   = world.Time,
                                    OriginalPosition = center,
                                    Position         = center,
                                    Momentum         = followFleet.FleetMomentum
                                };
                            }
                        }

                        // we've found someone to spectate, record it
                        if (followFleet != player?.Fleet && followFleet != SpectatingFleet)
                        {
                            SpectatingFleet = followFleet;
                        }

                        // if we haven't found anything to watch yet, watch the first ship we find
                        if (followBody == null)
                        {
                            followBody = player?.World.Bodies.OfType <Ship>().FirstOrDefault();
                        }

                        // if we haven't found anything to watch yet, watch anything
                        if (followBody == null)
                        {
                            followBody = player?.World.Bodies.FirstOrDefault();
                        }

                        if (followBody != null)
                        {
                            var size           = 6000;
                            var viewportHeight = size * 2;
                            var viewportWidth  = size * 2;

                            var playerViewport = new Envelope(
                                followBody.Position.X - viewportWidth / 2,
                                followBody.Position.Y - viewportHeight / 2,
                                followBody.Position.X + viewportWidth / 2,
                                followBody.Position.Y + viewportHeight / 2
                                );

                            BodyCache.Update(
                                world.BodiesNear(playerViewport).ToList(),
                                world.Time
                                );

                            var updates = BodyCache.BodiesByError();

                            var updateBodies = updates.Take((int)this.Bandwidth);

                            float VELOCITY_SCALE_FACTOR = 5000;

                            var updatedGroups = BodyCache.GroupsByError().ToList();

                            var groupsVector = NetWorldView.CreateGroupsVector(builder,
                                                                               updatedGroups.Select(b =>
                            {
                                var serverGroup = b.GroupUpdated;

                                var caption    = builder.CreateString(serverGroup.Caption ?? " ");
                                var color      = builder.CreateString(serverGroup.Color ?? "");
                                var customData = builder.CreateString(serverGroup.CustomData ?? "");

                                var group = NetGroup.CreateNetGroup(builder,
                                                                    group: serverGroup.ID,
                                                                    type: (byte)serverGroup.GroupType,
                                                                    captionOffset: caption,
                                                                    zindex: serverGroup.ZIndex,
                                                                    owner: serverGroup.OwnerID,
                                                                    colorOffset: color,
                                                                    customDataOffset: customData
                                                                    );
                                return(group);
                            }).ToArray());


                            foreach (var update in updatedGroups)
                            {
                                update.GroupClient = update.GroupUpdated.Clone();
                            }

                            var groupDeletesVector = NetWorldView.CreateGroupDeletesVector(builder, BodyCache.CollectStaleGroups().Select(b =>
                                                                                                                                          b.GroupUpdated.ID
                                                                                                                                          ).ToArray());


                            NetWorldView.StartUpdatesVector(builder, updateBodies.Count());
                            foreach (var b in updateBodies)
                            {
                                var serverBody = b.BodyUpdated;

                                var body = NetBody.CreateNetBody(builder,
                                                                 Id: serverBody.ID,
                                                                 DefinitionTime: serverBody.DefinitionTime,
                                                                 originalPosition_X: (short)serverBody.OriginalPosition.X,
                                                                 originalPosition_Y: (short)serverBody.OriginalPosition.Y,
                                                                 velocity_X: (short)(serverBody.Momentum.X * VELOCITY_SCALE_FACTOR),
                                                                 velocity_Y: (short)(serverBody.Momentum.Y * VELOCITY_SCALE_FACTOR),
                                                                 OriginalAngle: (sbyte)(serverBody.OriginalAngle / MathF.PI * 127),
                                                                 AngularVelocity: (sbyte)(serverBody.AngularVelocity * 10000),
                                                                 Size: (byte)(serverBody.Size / 5),
                                                                 Sprite: (ushort)serverBody.Sprite,
                                                                 Mode: serverBody.Mode,
                                                                 Group: serverBody.Group?.ID ?? 0);
                            }

                            var updatesVector = builder.EndVector();

                            foreach (var update in updateBodies)
                            {
                                update.BodyClient = update.BodyUpdated.Clone();
                            }

                            var deletesVector = NetWorldView.CreateDeletesVector(builder, BodyCache.CollectStaleBuckets().Select(b =>
                                                                                                                                 b.BodyUpdated.ID
                                                                                                                                 ).ToArray());

                            var          messages            = player.GetMessages();
                            VectorOffset announcementsVector = new VectorOffset();
                            if (messages != null && messages.Any())
                            {
                                announcementsVector = NetWorldView.CreateAnnouncementsVector(builder, messages.Select(e =>
                                {
                                    var stringType      = builder.CreateString(e.Type);
                                    var stringMessage   = builder.CreateString(e.Message);
                                    var stringExtraData = e.ExtraData != null
                                        ? builder.CreateString(JsonConvert.SerializeObject(e.ExtraData))
                                        : new StringOffset();

                                    NetAnnouncement.StartNetAnnouncement(builder);
                                    NetAnnouncement.AddType(builder, stringType);
                                    NetAnnouncement.AddText(builder, stringMessage);
                                    if (e.ExtraData != null)
                                    {
                                        NetAnnouncement.AddExtraData(builder, stringExtraData);
                                    }
                                    NetAnnouncement.AddPointsDelta(builder, e.PointsDelta);

                                    return(NetAnnouncement.EndNetAnnouncement(builder));
                                }).ToArray());
                            }

                            StringOffset customOffset = new StringOffset();
                            if (followFleet?.CustomData != null && followFleet.CustomData != CustomData)
                            {
                                customOffset = builder.CreateString(followFleet.CustomData);
                            }

                            NetWorldView.StartNetWorldView(builder);

                            // define camera
                            var cameraBody = NetBody.CreateNetBody(
                                builder,
                                Id: 0,
                                DefinitionTime: followBody?.DefinitionTime ?? 0,
                                originalPosition_X: (short)(followBody?.OriginalPosition.X ?? 0),
                                originalPosition_Y: (short)(followBody?.OriginalPosition.Y ?? 0),
                                velocity_X: (short)(followBody?.Momentum.X * VELOCITY_SCALE_FACTOR ?? 0),
                                velocity_Y: (short)(followBody?.Momentum.Y * VELOCITY_SCALE_FACTOR ?? 0),
                                OriginalAngle: (sbyte)(followBody?.OriginalAngle / MathF.PI / 127 ?? 0),
                                AngularVelocity: 0,
                                Size: 0,
                                Sprite: 0,
                                Mode: 0,
                                Group: 0
                                );

                            NetWorldView.AddCamera(builder, cameraBody);
                            NetWorldView.AddIsAlive(builder, player?.IsAlive ?? false);
                            NetWorldView.AddTime(builder, world.Time);

                            NetWorldView.AddUpdates(builder, updatesVector);
                            NetWorldView.AddDeletes(builder, deletesVector);

                            NetWorldView.AddGroups(builder, groupsVector);
                            NetWorldView.AddGroupDeletes(builder, groupDeletesVector);
                            if (messages != null && messages.Any())
                            {
                                NetWorldView.AddAnnouncements(builder, announcementsVector);
                            }

                            if (followFleet?.CustomData != null && followFleet.CustomData != CustomData)
                            {
                                NetWorldView.AddCustomData(builder, customOffset);
                            }
                            CustomData = followFleet?.CustomData;

                            var players = Player.GetWorldPlayers(world);
                            NetWorldView.AddPlayerCount(builder, (uint)world.AdvertisedPlayerCount);
                            NetWorldView.AddSpectatorCount(builder, (uint)players.Count(p => p.Connection?.IsSpectating ?? false));

                            NetWorldView.AddCooldownBoost(builder, (byte)((player?.Fleet?.BoostCooldownStatus * 255) ?? 0));
                            NetWorldView.AddCooldownShoot(builder, (byte)((player?.Fleet?.ShootCooldownStatus * 255) ?? 0));
                            NetWorldView.AddWorldSize(builder, (ushort)world.Hook.WorldSize);

                            if (followFleet != null)
                            {
                                // inform the client of which the fleet id
                                NetWorldView.AddFleetID(builder, (uint)followFleet.ID);
                            }
                            else
                            {
                                NetWorldView.AddFleetID(builder, 0);
                            }

                            var worldView = NetWorldView.EndNetWorldView(builder);

                            var newHash = world.Hook.GetHashCode();
                            if (HookHash != newHash)
                            {
                                this.Events.Enqueue(new BroadcastEvent
                                {
                                    EventType = "hook",
                                    Data      = JsonConvert.SerializeObject(world.Hook)
                                });
                            }

                            HookHash = newHash;

                            var q = NetQuantum.CreateNetQuantum(builder, AllMessages.NetWorldView, worldView.Value);
                            builder.Finish(q.Value);
                        }
                    }
                    await this.SendAsync(builder.DataBuffer, cancellationToken);

                    if (LeaderboardTime != (world.Leaderboard?.Time ?? 0))
                    {
                        LeaderboardTime = (world.Leaderboard?.Time ?? 0);

                        builder = new FlatBufferBuilder(1);

                        var stringName  = builder.CreateString(world.Leaderboard?.ArenaRecord?.Name ?? " ");
                        var stringColor = builder.CreateString(world.Leaderboard?.ArenaRecord?.Color ?? " ");

                        NetLeaderboardEntry.StartNetLeaderboardEntry(builder);
                        NetLeaderboardEntry.AddColor(builder, stringColor);
                        NetLeaderboardEntry.AddName(builder, stringName);
                        NetLeaderboardEntry.AddScore(builder, world.Leaderboard?.ArenaRecord?.Score ?? 0);
                        NetLeaderboardEntry.AddToken(builder, !string.IsNullOrEmpty(world.Leaderboard?.ArenaRecord?.Token));
                        var record = NetLeaderboardEntry.EndNetLeaderboardEntry(builder);


                        var entriesVector = NetLeaderboard.CreateEntriesVector(builder, world.Leaderboard.Entries.Select(e =>
                        {
                            // the strings must be created into the buffer before the are referenced
                            // and before the start of the entry object
                            stringName  = builder.CreateString(e.Name ?? string.Empty);
                            stringColor = builder.CreateString(e.Color ?? string.Empty);
                            StringOffset stringModeData = new StringOffset();

                            if (e.ModeData != null)
                            {
                                stringModeData = builder.CreateString(JsonConvert.SerializeObject(e.ModeData));
                            }

                            // here's the start of the entry object, after this we can only use
                            // predefined string offsets
                            NetLeaderboardEntry.StartNetLeaderboardEntry(builder);
                            NetLeaderboardEntry.AddFleetID(builder, e.FleetID);
                            NetLeaderboardEntry.AddName(builder, stringName);
                            NetLeaderboardEntry.AddColor(builder, stringColor);
                            NetLeaderboardEntry.AddScore(builder, e.Score);
                            NetLeaderboardEntry.AddPosition(builder, FromPositionVector(builder, e.Position));
                            NetLeaderboardEntry.AddToken(builder, !string.IsNullOrEmpty(e.Token));
                            if (e.ModeData != null)
                            {
                                NetLeaderboardEntry.AddModeData(builder, stringModeData);
                            }

                            return(NetLeaderboardEntry.EndNetLeaderboardEntry(builder));
                        }).ToArray());

                        var stringType = builder.CreateString(world.Leaderboard.Type ?? string.Empty);
                        NetLeaderboard.StartNetLeaderboard(builder);
                        NetLeaderboard.AddEntries(builder, entriesVector);
                        NetLeaderboard.AddType(builder, stringType);
                        NetLeaderboard.AddRecord(builder, record);

                        var leaderboardOffset = NetLeaderboard.EndNetLeaderboard(builder);

                        builder.Finish(NetQuantum.CreateNetQuantum(builder, AllMessages.NetLeaderboard, leaderboardOffset.Value).Value);
                        await this.SendAsync(builder.DataBuffer, cancellationToken);
                    }

                    while (Events.Count > 0)
                    {
                        var e = Events.Dequeue();

                        var eventType = builder.CreateString(e.EventType);
                        var eventData = builder.CreateString(e.Data);
                        NetEvent.StartNetEvent(builder);
                        NetEvent.AddType(builder, eventType);
                        NetEvent.AddData(builder, eventData);
                        var eventOffset = NetEvent.EndNetEvent(builder);

                        builder.Finish(NetQuantum.CreateNetQuantum(builder, AllMessages.NetEvent, eventOffset.Value).Value);
                        await this.SendAsync(builder.DataBuffer, cancellationToken);
                    }
                }
            }
            catch (WebSocketException)
            {
                //Console.WriteLine(e);
                throw;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
コード例 #28
0
 private void NetworkEventHandler(NetEvent netevent, string value)
 {
     _netEvent = netevent;
     _value    = value;
 }
コード例 #29
0
 public void CallNetEvent(NetEvent <INetClient> e)
 {
     OnNetEvent.Invoke(e);
 }
コード例 #30
0
ファイル: NetSocket.cs プロジェクト: zhuoyikang/iTank
    // 异步收包线程.
    private void waitSocket()
    {
        Debug.Log("receiver");
        int len;


        while (true)
        {
            if (!clientSocket.Poll(-1, SelectMode.SelectRead))
            {
                Debug.Log("poll error");
                Close();
            }

            len = clientSocket.Receive(buf.GetRaw(), 0, HEAD_SIZE,
                                       SocketFlags.None);

            if (len < 0)
            {
                Debug.Log("length error");
                Close();
                return;
            }

            Debug.Assert(len == HEAD_SIZE);
            int payload_length = buf.GetShort(0);
            //Debug.Log ("payload_length" + payload_length);

            Debug.Assert(payload_length < BUFF_SIZE);

            int want   = payload_length;
            int lenAll = 0;
            buf.Clear();

            SocketError socketError;

            while (want > 0)
            {
                len = clientSocket.Receive(buf.GetRaw(), lenAll, want,
                                           SocketFlags.None, out socketError);
                want   -= len;
                lenAll += len;
            }


            // Debug.Log("receive length:" + lenAll+ " payload_length:"
            //           + payload_length);


            Debug.Assert(payload_length == lenAll);
            var ms_byte = new byte[payload_length];
            Array.Copy(buf.GetRaw(), 0, ms_byte, 0, payload_length);
            var    ms2       = new MemoryStream(ms_byte, 0, payload_length);
            int    cmd       = ms2.ReadByte();
            string eventName = EventName.GetEventName(cmd);
            // ShowBytes("bytes:"+eventName+":", buf.GetRaw(), payload_length);
            NetEvent.FireOut(eventName, new object[] { ms2 });

            /*
             * var protoPacket = ProtoBuf.Serializer.Deserialize<packet>(ms2);
             * Debug.Log("receive packet.cmd:"+protoPacket.cmd);
             * var eventname = MessageMap.GetEventName(protoPacket.cmd);
             * Event.FireOut(eventname, new object[]{protoPacket.payload});
             */
        }
    }
コード例 #31
0
ファイル: GameSystem.cs プロジェクト: t13554yt/CarMeter
	private void NetworkEventHandler(NetEvent netevent) {
		_netEvent = netevent;
	}
コード例 #32
0
ファイル: TestNetEncoding.cs プロジェクト: ashoulson/MiniUDP
 private static NetEvent CreateEvent(NetEventType type, NetPeer peer)
 {
     NetEvent evnt = new NetEvent();
       evnt.Initialize(type, peer);
       return evnt;
 }
コード例 #33
0
ファイル: CsWriter.cs プロジェクト: inormis/cstsd
 public virtual string WriteEvent(NetEvent netEvent)
 {
     //TODO: not exactly finished
     return($"<EVENT {netEvent.Name}>");
 }
コード例 #34
0
ファイル: TestNetEncoding.cs プロジェクト: ashoulson/MiniUDP
        private static NetEvent CreateFilled(int length)
        {
            byte[] filled = new byte[2048];
              for (int i = 0; i < filled.Length; i++)
            filled[i] = (byte)(i % 256);

              NetEvent evnt = new NetEvent();
              evnt.Initialize(NetEventType.Notification, null);
              evnt.ReadData(filled, 0, (ushort)length);
              return evnt;
        }
 void NetEventFailedToConnectToMasterServer(NetEvent net_event)
 {
     if(state_ == State.JOIN){
         display_err_ = ""+net_event.error();
         SetState(State.MASTER_SERVER_FAIL);
     }
     ConsoleScript.Log("Impossible de se connecter au serveur maitre: "+net_event.error());
 }
コード例 #36
0
        private void HandleNetworkReceive(NetEvent evt)
        {
            GameClient gc = Clients[evt.Peer.Id];

            gc.PacketStream.AddDataReceivedEvent(evt);
        }
コード例 #37
0
 private void ReturnNetEventObject(NetEvent evt)
 {
     evt.type = NetEventType.None;
     evt.data = null;
     this.netEventPool.ReturnObject(evt);
 }
コード例 #38
0
ファイル: NetUIScript.cs プロジェクト: adenlb/FTJ
	void NetEventFailedToConnect(NetEvent net_event){		
		if(state_ == State.JOINING){
			if(net_event.error() == NetworkConnectionError.InvalidPassword){
				SetState(State.JOIN_PASSWORD);
			} else {
				display_err_ = ""+net_event.error();
				SetState(State.JOIN_FAIL);
			}
		}
		ConsoleScript.Log("Failed to connect: "+net_event.error());
	}
コード例 #39
0
 public void AddDataReceivedEvent(NetEvent evt)
 {
     _dataReceivedEvents.Add(evt);
 }
コード例 #40
0
ファイル: NetUIScript.cs プロジェクト: adenlb/FTJ
	void NetEventPlayerDisconnected(NetEvent net_event) {
		NetworkPlayer player = net_event.network_player();
		ConsoleScript.Log("Player "+player+" disconnected");
		PlayerListScript.Instance().Remove(int.Parse(player.ToString()));
		Network.RemoveRPCs(player);
    	Network.DestroyPlayerObjects(player);
	}
コード例 #41
0
ファイル: TestNetEncoding.cs プロジェクト: ashoulson/MiniUDP
 private static NetEvent CreateStringEvent(string value)
 {
     byte[] bytes = Encoding.UTF8.GetBytes(value);
       NetEvent evnt = new NetEvent();
       evnt.Initialize(NetEventType.Notification, null);
       evnt.ReadData(bytes, 0, (ushort)bytes.Length);
       return evnt;
 }
コード例 #42
0
    void Update()
    {
        if (current_song_ != target_song_)
        {
            if (music_.volume == 0.0f)
            {
                current_song_ = target_song_;
                if (current_song_ != -1)
                {
                    music_.clip = songs[current_song_];
                }
                else
                {
                    music_.Stop();
                }
            }
            else
            {
                music_.volume = Mathf.Max(0.0f, music_.volume - Time.deltaTime);
            }
        }
        else if (current_song_ != -1)
        {
            music_.volume = Mathf.Min(MAX_SONG_VOLUME, music_.volume + Time.deltaTime);
        }
        if (!music_.isPlaying)
        {
            music_.Play();
        }
        NetEvent net_event = NetEventScript.Instance().GetEvent();

        while (net_event != null)
        {
            switch (net_event.type())
            {
            case NetEvent.Type.SERVER_INITIALIZED:
                NetEventServerInitialized();
                break;

            case NetEvent.Type.CONNECTED_TO_SERVER:
                NetEventConnectedToServer();
                break;

            case NetEvent.Type.FAILED_TO_CONNECT:
                NetEventFailedToConnect(net_event);
                break;

            case NetEvent.Type.FAILED_TO_CONNECT_TO_MASTER_SERVER:
                NetEventFailedToConnectToMasterServer(net_event);
                break;

            case NetEvent.Type.MASTER_SERVER_EVENT:
                NetEventMasterServerEvent(net_event);
                break;

            case NetEvent.Type.PLAYER_CONNECTED:
                ConsoleScript.Log("Player " + net_event.network_player() + " connected");
                networkView.RPC("SyncSongWithServer", RPCMode.Others, int.Parse(net_event.network_player().ToString()), current_song_, target_song_, music_.volume, music_.time);
                break;

            case NetEvent.Type.PLAYER_DISCONNECTED:
                NetEventPlayerDisconnected(net_event);
                break;

            case NetEvent.Type.DISCONNECTED_FROM_SERVER:
                NetEventDisconnectedFromServer(net_event);
                break;
            }
            net_event = NetEventScript.Instance().GetEvent();
        }
    }
コード例 #43
0
ファイル: NetUIScript.cs プロジェクト: adenlb/FTJ
	void NetEventFailedToConnectToMasterServer(NetEvent net_event) {
		if(state_ == State.JOIN){
			display_err_ = ""+net_event.error();
			SetState(State.MASTER_SERVER_FAIL);
		}
		ConsoleScript.Log("Failed to connect to master server: "+net_event.error());
	}
コード例 #44
0
ファイル: NetEncoding.cs プロジェクト: ashoulson/MiniUDP
        /// <summary>
        /// Reads payload data from the given buffer.
        /// </summary>
        internal static bool ReadPayload(
      Func<NetEventType, NetPeer, NetEvent> eventFactory,
      NetPeer peer,
      byte[] buffer,
      int length,
      out ushort sequence,
      out NetEvent evnt)
        {
            evnt = null;

              // Read header (already know the type)
              sequence = NetEncoding.ReadU16(buffer, 1);
              int position = NetEncoding.PAYLOAD_HEADER_SIZE;

              ushort dataLength = (ushort)(length - position);
              if ((position + dataLength) > length)
            return false; // We're reading past the end of the packet data

              evnt = eventFactory.Invoke(NetEventType.Payload, peer);
              return evnt.ReadData(buffer, position, dataLength); ;
        }
コード例 #45
0
ファイル: NetUIScript.cs プロジェクト: adenlb/FTJ
	void NetEventMasterServerEvent(NetEvent net_event){
		switch(net_event.master_server_event()){
			case MasterServerEvent.HostListReceived:
        		ConsoleScript.Log("Received a host list from the master server.");
        		if(queued_join_game_name_.Length > 0){
        			JoinHostListGameByName(queued_join_game_name_);
        			queued_join_game_name_ = "";
        		}
        		break;
			case MasterServerEvent.RegistrationFailedGameName:
        		ConsoleScript.Log("Registration failed because an empty game name was given.");
        		break;
			case MasterServerEvent.RegistrationFailedGameType:
        		ConsoleScript.Log("Registration failed because an empty game type was given.");
        		break;
			case MasterServerEvent.RegistrationFailedNoServer:
        		ConsoleScript.Log("Registration failed because no server is running.");
        		break;
			case MasterServerEvent.RegistrationSucceeded:
        		ConsoleScript.Log("Registration to master server succeeded, received confirmation.");
        		break;
		}
	}
コード例 #46
0
ファイル: NetEncoding.cs プロジェクト: ashoulson/MiniUDP
        /// <summary>
        /// Reads a length-prefixed notification block.
        /// </summary>
        private static int ReadNotification(
      byte[] buffer,
      int length,
      int position,
      NetEvent destination)
        {
            // Read the length we added
              ushort dataLength = NetEncoding.ReadU16(buffer, position);
              position += NetEncoding.NOTIFICATION_HEADER_SIZE;

              // Avoid a crash if the packet is bad (or malicious)
              if ((position + dataLength) > length)
            return -1;

              // Read the data into the event's buffer
              if (destination.ReadData(buffer, position, dataLength) == false)
            return -1;
              return NetEncoding.NOTIFICATION_HEADER_SIZE + dataLength;
        }
コード例 #47
0
ファイル: NetUIScript.cs プロジェクト: adenlb/FTJ
	void NetEventDisconnectedFromServer(NetEvent net_event) {
		switch(net_event.network_disconnection()){
			case NetworkDisconnection.Disconnected:
				ConsoleScript.Log("Cleanly disconnected from server");
				break;
			case NetworkDisconnection.LostConnection:
				ConsoleScript.Log("Connection to server was lost unexpectedly");
				break;
		}
		if(state_ == State.NONE || state_ == State.JOIN_SUCCESS || state_ == State.JOINING){
			Application.LoadLevel(Application.loadedLevel);
		}
	}
コード例 #48
0
ファイル: NetManager.cs プロジェクト: envis10n/XeonProject
 public void EmitNetEvent(NetEvent <INetClient> e)
 {
     NetEventIn.Invoke(e);
 }