Ejemplo n.º 1
0
    void Awake()
    {
        if (newClient == null)
        {
            newClient = new NewClientEvent();
        }

        if (taskComplete == null)
        {
            taskComplete = new TaskCompleteEvent();
        }

        if (newIron == null)
        {
            newIron = new NewIronEvent();
        }

        if (newClothes == null)
        {
            newClothes = new NewClothesEvent();
        }

        if (timeExpired == null)
        {
            timeExpired = new TimeExpiredEvent();
        }

        if (addScore == null)
        {
            addScore = new AddScoreEvent();
        }
    }
    protected void Update()
    {
        while (!NetworkedEntityCoordinator.MarkedForInstantiation.IsEmpty)
        {
            NetworkedEntityCoordinator.MarkedForInstantiation.TryDequeue(out var item);
            var go     = Resources.Load("Prefabs/" + item.PrefabName) as GameObject;
            var entity = go.GetComponent <NetworkedEntity>();
            entity.prefab     = go;
            entity.entityId   = item.Id;
            entity.prefabName = item.PrefabName;

            Instantiate(go);
        }

        while (!NetworkedEntityCoordinator.MarkedForUpdate.IsEmpty)
        {
            NetworkedEntityCoordinator.MarkedForUpdate.TryDequeue(out var item);
            (var entity, var packet, var info) = item;

            var val = GetValue(packet.Data, packet.MemberType);
            if (val == null)
            {
                Debug.LogError("Value is null for some reason");
                continue;
            }

            switch (info.MemberType)
            {
            case MemberTypes.Property:
                PropertyInfo prop = info as PropertyInfo;
                if (null != prop && prop.CanWrite)
                {
                    prop.SetValue(entity, val, null);
                }
                break;

            case MemberTypes.Field:
                FieldInfo field = info as FieldInfo;
                if (null != field)
                {
                    field.SetValue(entity, val);
                }
                break;

            default:
                Debug.LogWarning(
                    $"{entity.gameObject.name}:{nameof(entity)}->{packet.MemberName} does not exist or is not valid member type");
                break;
            }
        }

        while (!NetworkedEntityCoordinator.ClientConnectEventQueue.IsEmpty)
        {
            NetworkedEntityCoordinator.ClientConnectEventQueue.TryDequeue(out var item);
            NewClientEvent?.Invoke(item.Item1, item.Item2);
        }
    }
Ejemplo n.º 3
0
 private void NotifyNewClientEvent(String pClientID)
 {
     lock (ConnectedClients)
     {
         //add client if not exist
         if (ConnectedClients.All(t => t.ID != pClientID))
         {
             ConnectedClients.Add(new WorkerClient()
             {
                 ID = pClientID
             });
         }
         NewClientEvent?.Invoke(ConnectedClients.FirstOrDefault(t => t.ID == pClientID));
         NotifyNewLogMessageEvent($"Client connected: {pClientID}");
     }
 }
Ejemplo n.º 4
0
 private void NotifyNewClientEvent(String pClientID)
 {
     lock (_clients)
     {
         //add client if not exist
         if (_clients.All(t => t.ID != pClientID))
         {
             App.Current.Dispatcher.Invoke(() =>
             {
                 _clients.Add(new Client()
                 {
                     ID = pClientID
                 });
             });
         }
         NewClientEvent?.Invoke(_clients.First(t => t.ID == pClientID));
         NotifyNewLogMessageEvent($"Client connected: {pClientID}");
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Initialize the server with a port number.
 /// </summary>
 /// <param name="port">Port number.</param>
 public MyListener(int port)
 {
     Listener       = new TcpListener(IPAddress.Any, port); // Create new listner.
     ListenerThread = new Thread(delegate()                 // Thread handling connection requests.
     {
         try
         {
             while (IsRunning)
             {
                 var newClient = new MyClient(Listener.AcceptTcpClient(), true);
                 Clients.Add(newClient);
                 newClient.NewMessageEvent += NewClient_NewMessageEvent;
                 NewClientEvent?.Invoke(this, newClient);
             }
         }
         catch
         {
             Dispose();
         }
     })
     {
         IsBackground = true
     };
 }
Ejemplo n.º 6
0
        public override void Initialize()
        {
            //init updater
            _updateNotifier = new UpdateNotifier();
            _updateNotifier.PropertyChanged += (sender, args) => OnPropertyChanged(nameof(VersionStatus));

            //forward signalr manager
            _signalrmanager = new SignalRManager();
            _signalrmanager.NewClientEvent          += delegate(Client client) { NewClientEvent?.Invoke(client); };
            _signalrmanager.ClientDisconnectedEvent += delegate(Client client) { ClientDisconnectedEvent?.Invoke(client); };
            _signalrmanager.ClientUpdatedEvent      += delegate(Client client) { ClientUpdatedEvent?.Invoke(client); };
            _signalrmanager.NewLogMessageEvent      += NotifyNewLogMessageEvent;
            _signalrmanager.NewConsoleLogMessage    += delegate(Client pClient, string message) { NewConsoleLogMessage?.Invoke(pClient, message); };
            _signalrmanager.WorkRequestedEvent      += SignalrmanagerOnWorkRequestedEvent;
            _signalrmanager.ResultsReceivedEvent    += SignalrmanagerOnResultsReceivedEvent;
            _signalrmanager.Initialize();

            //create command manager
            _commandManager = new CommandManager();
            _commandManager.NewLogMessageEvent += NotifyNewLogMessageEvent;
            _commandManager.Initialize();

            base.Initialize();
        }
Ejemplo n.º 7
0
 public override Task OnConnectedAsync()
 {
     NewClientEvent?.Invoke(this.Context?.ConnectionId);
     return(base.OnConnectedAsync());
 }
Ejemplo n.º 8
0
        public override void Initialize()
        {
            //get frontend target
            var predictionTarget = GetPredictionTarget();

            //init fs manager
            _filesystemManager = new FilesystemManager();
            _filesystemManager.NewLogMessageEvent += CoreNotifyLogMessage;
            _filesystemManager.Initialize();

            //configuration manager
            _configManager = new ConfigurationManager(_filesystemManager);
            _configManager.NewLogMessageEvent += CoreNotifyLogMessage;
            _configManager.Initialize();

            //forward signalr manager
            _signalrservermanager = new SignalRServerManager();
            _signalrservermanager.NewClientEvent                 += delegate(WorkerClient client) { NewClientEvent?.Invoke(client); ClientsUpdated(_signalrservermanager.ConnectedClients.Count); };
            _signalrservermanager.ClientDisconnectedEvent        += delegate(WorkerClient client) { ClientDisconnectedEvent?.Invoke(client); ClientsUpdated(_signalrservermanager.ConnectedClients.Count); };
            _signalrservermanager.ClientUpdatedEvent             += delegate(WorkerClient client) { ClientUpdatedEvent?.Invoke(client); };
            _signalrservermanager.NewLogMessageEvent             += CoreNotifyLogMessage;
            _signalrservermanager.NewConsoleLogMessage           += delegate(WorkerClient pClient, string message) { NewConsoleLogMessage?.Invoke(pClient, message); };
            _signalrservermanager.NewClientErrorMessageEvent     += delegate(WorkerClient pClient, String pErrorMessage, List <String> pErrorLog, WorkPackage pWorkPackage) { _commandManager?.ReceiveErrorFromWorker(pErrorLog, pWorkPackage); };
            _signalrservermanager.WorkRequestedEvent             += SignalrmanagerOnWorkRequestedEvent;
            _signalrservermanager.TrainingResultsReceivedEvent   += SignalrmanagerOnTrainingResultsReceivedEvent;
            _signalrservermanager.PredictionResultsReceivedEvent += SignalrmanagerOnPredictionResultsReceivedEvent;
            _signalrservermanager.Initialize();

            //frontend signalr manager
            _signalrclientmanager = new SignalRClientManager();
            _signalrclientmanager.NewLogMessageEvent        += CoreNotifyLogMessage;
            _signalrclientmanager.PredictionRequestedEvent  += _signalrclientmanager_PredictionRequestedEvent;
            _signalrclientmanager.ConfigurationUpdatedEvent += delegate(ConductorConfiguration pConfiguration) { this._commandManager.UpdateConfiguration(pConfiguration); };
            _signalrclientmanager.ConnectedEvent            += delegate() { _commandManager.ReportConfiguration(); };
            if (!String.IsNullOrWhiteSpace(predictionTarget))
            {   //only connect to frontend if a target is specified
                _signalrclientmanager.Initialize($"{predictionTarget}/server/rnn");
                _signalrclientmanager.ConnectAsync()
                .ContinueWith(t =>
                {
                    this.ClientsUpdated(_signalrservermanager.ConnectedClients.Count);
                }, TaskContinuationOptions.OnlyOnRanToCompletion);
            }
            else
            {
                this.CoreNotifyLogMessage("SignalRClientManager will not attempt to connect to a frontend because none was specified.");
            }

            //create command manager
            _commandManager = new CommandManager(_configManager, _filesystemManager, _signalrservermanager.ConnectedClients);
            _commandManager.NewLogMessageEvent      += CoreNotifyLogMessage;
            _commandManager.PredictionFinishedEvent += _commandManager_PredictionFinishedEvent;
            _commandManager.StatusChangedEvent      += _commandManager_StatusChangedEvent;
            _commandManager.Initialize();

            base.Initialize();
        }