private void Start()
    {
        _listenning     = false;
        _newConnections = new Queue <NewConnection>();
        _clients        = new Dictionary <int, ORTCPClient>();
        StartListening();

        Observable
        .EveryUpdate()
        .Where(_ => _newConnections.Count > 0)
        .Subscribe(_ =>
        {
            //Debug.Log(Thread.CurrentThread.ManagedThreadId);
            NewConnection newConnection = _newConnections.Dequeue();
            ORTCPClient client          = ORTCPClient.CreateInstance("ORMultiServerClient", newConnection.tcpClient, this);


            int clientID = SaveClient(client);
            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType        = ORTCPEventType.Connected;
            eventParams.client           = client;
            eventParams.clientID         = clientID;
            eventParams.socket           = newConnection.tcpClient;
            if (verbose)
            {
                print("[TCPServer] New client connected");
            }
        });
    }
Exemple #2
0
    private void OnTestInputAllowed()
    {
        FadeManager.EnableCanvasGroup(_testElements, true);

        _joinButtons.ForEach(jb =>
        {
            jb.Button.gameObject.SetActive(false);
            jb.Slider
            .OnValueChangedAsObservable()
            .Subscribe(val =>
            {
                var b        = jb.Slider.value != -1;
                jb.Text.text = ((TeamType)jb.Slider.value).ToString();
                jb.Button.gameObject.SetActive(b);
            }).AddTo(jb.Slider.gameObject);

            jb.Button
            .OnClickAsObservable()
            .Where(_ => jb.Slider.value != -1)
            .Subscribe(_ =>
            {
                var msg     = new ORTCPEventParams();
                msg.message = "{\"state\":10,\"station_id\":" + jb.Lane + ",\"team\":" + jb.Slider.value + "}";
                _appStateBroker.ComReceivingStream.OnNext(msg);
                jb.Slider.gameObject.SetActive(false);
                jb.Button.gameObject.SetActive(false);
            })
            .AddTo(jb.Button.gameObject);
        });
    }
    public void Start(int port = 0)
    {
        _listenning     = false;
        _newConnections = new Queue <NewConnection>();
        _clients        = new Dictionary <int, ORTCPClient>();

        if (port != 0)
        {
            StartListening(port);
        }
        else
        {
            StartListening();
        }

        Observable
        .Interval(TimeSpan.FromSeconds(1))
        .Where(_ => _newConnections.Count > 0)
        .Subscribe(_ =>
        {
            //Debug.Log(Thread.CurrentThread.ManagedThreadId);
            NewConnection newConnection = _newConnections.Dequeue();
            ORTCPClient client          = ORTCPClient.CreateInstance("ORMultiServerClient", newConnection.tcpClient, this, port);

            int clientID = SaveClient(client);
            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType        = ORTCPEventType.Connected;
            eventParams.client           = client;
            eventParams.clientID         = clientID;
            eventParams.socket           = newConnection.tcpClient;
            Console.BackgroundColor      = ConsoleColor.Cyan;
            Console.ForegroundColor      = ConsoleColor.Black;
            Console.WriteLine("[TCPServer] New client connected");
        });
    }
Exemple #4
0
 private void OnTCPMessage(ORTCPEventParams e)
 {
     print("===========================================");
     print("message recived from client: " + e.message);
     output.text += e.message + "\n";
     // just as a reminder, this will be a JSON in format of {hand:"right", number:"22", team_id:"0", path:"F/..."}.
     //let me know if I left something out or you want a different format.
 }
 public void OnClientDisconnect(ORTCPEventParams eventParams)
 {
     Console.BackgroundColor = ConsoleColor.Red;
     Console.ForegroundColor = ConsoleColor.White;
     Console.WriteLine("[TCPServer] OnClientDisconnect");
     eventParams.clientID = GetClientID(eventParams.client);
     RemoveClient(eventParams.client);
 }
Exemple #6
0
 public void OnClientDisconnect(ORTCPEventParams eventParams)
 {
     if (verbose)
     {
         print("[TCPServer] OnClientDisconnect");
     }
     eventParams.clientID = GetClientID(eventParams.client);
     RemoveClient(eventParams.client);
 }
    private void Update()
    {
        while (_events.Count > 0)
        {
            ORTCPEventType eventType = _events.Dequeue();

            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType = eventType;
            eventParams.server    = this;
            eventParams.socket    = _client;

            if (eventType == ORTCPEventType.Connected)
            {
                print("[TCPServer] New client connected");
                foreach (GameObject listener in listeners)
                {
                    listener.SendMessage(onConnectMessage, eventParams, SendMessageOptions.DontRequireReceiver);
                }
            }
            else if (eventType == ORTCPEventType.Disconnected)
            {
                _reader.Close();
                _writer.Close();
                _client.Close();
                print("[TCPServer] Server Disconnected");
                foreach (GameObject listener in listeners)
                {
                    listener.SendMessage(onDisconnectMessage, eventParams, SendMessageOptions.DontRequireReceiver);
                }

                if (autoListenOnDisconnect)
                {
                    StartListening();
                }
            }
            else if (eventType == ORTCPEventType.DataReceived)
            {
                if (socketType == ORTCPSocketType.Text)
                {
                    eventParams.message = _messages.Dequeue();
                    print("[TCPServer] Server DataReceived: " + eventParams.message);
                }
                else
                {
                    eventParams.packet = _packets.Dequeue();
                }

                foreach (GameObject listener in listeners)
                {
                    listener.SendMessage(onDataReceivedMessage, eventParams, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
Exemple #8
0
 public void OnDataReceived(ORTCPEventParams eventParams)
 {
     if (verbose)
     {
         print("[TCPServer] OnDataReceived: " + eventParams.message);
     }
     eventParams.clientID = GetClientID(eventParams.client);
     if (OnTCPMessageRecived != null)
     {
         OnTCPMessageRecived(eventParams);
     }
 }
    public void OnDataReceived(ORTCPEventParams eventParams)
    {
        Console.BackgroundColor = ConsoleColor.DarkYellow;
        Console.ForegroundColor = ConsoleColor.Black;
        //Console.Clear();

        Console.WriteLine("[TCPServer] OnDataReceived: " + eventParams.message);
        eventParams.clientID = GetClientID(eventParams.client);
        if (OnTCPMessageRecived != null)
        {
            OnTCPMessageRecived(eventParams);
        }
    }
    private UniRx.IObservable <string> OnTCPMessage(ORTCPEventParams e)
    {
        var msg = e.message;

        myComandList.Add(msg);
        Debug.Log(msg);
        if (msg.Contains("[TCPServer]"))
        {
            Servermsg.text = msg + "  [" + DateTime.Now + "] " + "\n" + Servermsg.text;
        }
        else
        {
            Output.text = msg + "  [" + DateTime.Now + "] " + "\n" + Output.text;
        }
        return(myComandList.ToObservable());
    }
Exemple #11
0
    private void Awake()
    {
        if (_instance != null && _instance != this)
        {
            Destroy(this.gameObject);
        }
        else
        {
            _instance = this;
        }
        //debug binding
        Observable.EveryUpdate()
        .Select(_ => GameManager.TargetObject_External)
        .DistinctUntilChanged()
        .Subscribe(_ => verbose = (GameManager.TargetObject_External & TargetObject.TCP) == TargetObject.TCP)
        .AddTo(gameObject);

        _listenning     = false;
        _newConnections = new Queue <NewConnection>();
        _clients        = new Dictionary <int, ORTCPClient>();
        StartListening();

        Observable
        .EveryUpdate()
        .Where(_ => _newConnections.Count > 0)
        .Subscribe(_ =>
        {
            //Debug.Log(Thread.CurrentThread.ManagedThreadId);
            NewConnection newConnection = _newConnections.Dequeue();
            ORTCPClient client          = ORTCPClient.CreateInstance("ORMultiServerClient", newConnection.tcpClient, this);


            int clientID = SaveClient(client);
            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType        = ORTCPEventType.Connected;
            eventParams.client           = client;
            eventParams.clientID         = clientID;
            eventParams.socket           = newConnection.tcpClient;
            if (verbose)
            {
                print("[TCPServer] New client connected");
            }
        });
    }
Exemple #12
0
    public void Start()
    {
        Connect();
        Observable
        .Interval(TimeSpan.FromSeconds(1))
        .Where(x => _events.Count > 0)
        .Subscribe(x =>
        {
            ORTCPEventType eventType = _events.Dequeue();

            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType        = eventType;
            eventParams.client           = this;
            eventParams.socket           = _client;

            if (eventType == ORTCPEventType.Connected)
            {
                //Console.WriteLine("[TCPClient] Connnected to server");
                if (serverDelegate != null)
                {
                    serverDelegate.OnServerConnect(eventParams);
                }
            }
            else if (eventType == ORTCPEventType.Disconnected)
            {
                //Console.WriteLine("[TCPClient] Disconnnected from server");
                if (serverDelegate != null)
                {
                    serverDelegate.OnClientDisconnect(eventParams);
                }

                _reader.Close();
                _writer.Close();
                _client.Close();
            }
            else if (eventType == ORTCPEventType.DataReceived)
            {
                if (socketType == ORTCPSocketType.Text)
                {
                    eventParams.message = _messages.Dequeue();
                    //	Console.WriteLine("[TCPClient] DataReceived: "+ eventParams.message);

                    if (OnTCPMessageRecived != null)
                    {
                        OnTCPMessageRecived(eventParams);
                    }
                }
                else
                {
                    eventParams.packet = _packets.Dequeue();
                }
                if (serverDelegate != null)
                {
                    serverDelegate.OnDataReceived(eventParams);
                }
            }
            else if (eventType == ORTCPEventType.ConnectionRefused)
            {
                //Console.WriteLine("[TCPClient] ConnectionRefused... will try again...");
            }
        });
    }
 private void OnMessageRecived(ORTCPEventParams e)
 {
     _appStateBroker.ComReceivingStream.OnNext(e);
 }
Exemple #14
0
 //Delegation methods. The clients call these
 public void OnServerConnect(ORTCPEventParams eventParams)
 {
     //if(verbose)print("[TCPServer] OnServerConnect");
 }
Exemple #15
0
    private void Update()
    {
        while (_events.Count > 0)
        {
            ORTCPEventType eventType = _events.Dequeue();

            ORTCPEventParams eventParams = new ORTCPEventParams();
            eventParams.eventType = eventType;
            eventParams.client    = this;
            eventParams.socket    = _client;

            if (eventType == ORTCPEventType.Connected)
            {
                if (verbose)
                {
                    print("[{name}] Connnected to server");
                }
                if (serverDelegate != null)
                {
                    serverDelegate.OnServerConnect(eventParams);
                }
                Send(isShowControl?"100":GameManager.StatusMsgBackup);
            }
            else if (eventType == ORTCPEventType.Disconnected)
            {
                if (verbose)
                {
                    print("[{name}] Disconnnected from server");
                }
                if (serverDelegate != null)
                {
                    serverDelegate.OnClientDisconnect(eventParams);
                }

                _reader.Close();
                _writer.Close();
                _client.Close();

                if (autoConnectOnDisconnect)
                {
                    ORTimer.Execute(gameObject, disconnectTryInterval, "OnDisconnectTimer");
                }
            }
            else if (eventType == ORTCPEventType.DataReceived)
            {
                if (socketType == ORTCPSocketType.Text)
                {
                    eventParams.message = _messages.Dequeue();
                    if (verbose)
                    {
                        print("[{name}] DataReceived: " + eventParams.message);
                    }

                    if (OnTCPMessageRecived != null)
                    {
                        OnTCPMessageRecived(eventParams);
                    }
                }
                else
                {
                    eventParams.packet = _packets.Dequeue();
                }
                if (serverDelegate != null)
                {
                    serverDelegate.OnDataReceived(eventParams);
                }
            }
            else if (eventType == ORTCPEventType.ConnectionRefused)
            {
                if (verbose)
                {
                    print("[{name}] ConnectionRefused... will try again...");
                }
                if (autoConnectOnConnectionRefused)
                {
                    ORTimer.Execute(gameObject, connectionRefusedTryInterval, "OnConnectionRefusedTimer");
                }
            }
        }
    }
        static void DoCommnad(ORTCPEventParams e)
        {
            var cmd = e.message;

            switch (cmd)
            {
            case "100":
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.White;
                APP = e.client;
                var str = "[TCPServer] Sending Message to all Clients: TargetApp Connected";
                Console.WriteLine(str);
                ORTCPMultiServer.Instance.SendAllClientsMessage(str);
                APP?.Send("Ready to receive cmds");
                break;

            case "200":
                Console.BackgroundColor = ConsoleColor.DarkGray;
                Console.ForegroundColor = ConsoleColor.White;
                SC = e.client;
                var str1 = "[TCPServer] Sending Message to all Clients: ShowControl Connected";
                Console.WriteLine(str1);
                ORTCPMultiServer.Instance.SendAllClientsMessage(str1);
                APP?.Send("Show Control Connected");
                break;

            case "shutdown-machine":
            {
                Console.ForegroundColor = ConsoleColor.Green;
                var str2 = "[TCPServer] Sending Message to all Clients: Shutting down in 3s";
                Console.WriteLine(str2);
                ORTCPMultiServer.Instance.SendAllClientsMessage(str2);
                APP?.Send("Shutting down in 3s..");
                Observable.Timer(TimeSpan.FromSeconds(3))
                .Take(1)
                .Subscribe(_ =>
                    {
                        ProcessStartInfo proc = new ProcessStartInfo();
                        proc.WindowStyle      = ProcessWindowStyle.Hidden;
                        proc.FileName         = "cmd";
                        proc.Arguments        = "/C shutdown /s /t 0";
                        Process.Start(proc);
                    });
            }
            break;

            case "restart-machine":
            {
                Console.ForegroundColor = ConsoleColor.Green;
                var str3 = "[TCPServer] Sending Message to all Clients: Restarting in 3s";
                Console.WriteLine(str3);
                ORTCPMultiServer.Instance.SendAllClientsMessage(str3);
                APP?.Send("Shutting down in 3s...");
                Observable.Timer(TimeSpan.FromSeconds(3))
                .Take(1)
                .Subscribe(_ =>
                    {
                        ProcessStartInfo proc = new ProcessStartInfo();
                        proc.WindowStyle      = ProcessWindowStyle.Hidden;
                        proc.FileName         = "cmd";
                        proc.Arguments        = "/C shutdown /f /r /t 0";
                        Process.Start(proc);
                    });
            }
            break;

            case "restart-application":
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.White;
                APP?.Send("Restarting the app..");

                Observable.Timer(TimeSpan.FromSeconds(2))
                .Take(1)
                .Subscribe(_ => TargetApp.CloseMainWindow(),
                           () =>
                    {
                        Observable.Timer(TimeSpan.FromSeconds(2))
                        .Take(1)
                        .Subscribe(_ => TargetApp.Start());
                    });
            }
            break;

            case "reset-application":
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.White;
                var str3 = "reset-application";
                Console.WriteLine("[TCPServer] Sending Message to all Clients: " + str3);
                ORTCPMultiServer.Instance.SendAllClientsMessage(str3);
            }
            break;

            case "shutdown-application":
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.White;
                APP?.Send("Shutting down the app...");
                Observable.Timer(TimeSpan.FromSeconds(2))
                .Take(1)
                .Subscribe(_ => TargetApp.CloseMainWindow());
            }
            break;

            case "status-application":
            {
                Console.BackgroundColor = ConsoleColor.Blue;
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("[TCPServer] Sending Message to App client: status-application");
                APP?.Send(e.message);
            }
            break;

            default:
            {
                if (SC != null)
                {
                    SC.Send(e.message);
                }
                else
                {
                    Console.Write("Unknown command. Show Control is null.");
                }
            }
            break;
            }
        }
Exemple #17
0
    private void Awake()
    {
        _appStateBroker = AppStateBroker.Instance;
        AutoTest        = AutoTest_External;

#if !UNITY_EDITOR
        DevMode = false;
#endif
        //Debug msg binding
        Observable
        .EveryUpdate()
        .Select(_ => TargetLane)
        .DistinctUntilChanged()
        .Subscribe(_ =>
        {
            TargetLane_External = _;
        }).AddTo(gameObject);

        Observable
        .EveryUpdate()
        .Select(_ => TargetObject)
        .DistinctUntilChanged()
        .Subscribe(_ =>
        {
            TargetObject_External = _;
        }).AddTo(gameObject);

        //to reset
        ResetApp
        .Where(b => b)
        .Take(1)
        .Subscribe(x =>
        {
            ResetApp.Value = false;
            AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}");
            Observable.Timer(TimeSpan.FromSeconds(1f))
            .Subscribe(_ => SceneManager.LoadScene(SceneManager.GetActiveScene().name))
            .AddTo(gameObject);
        })
        .AddTo(gameObject);
        //to clibration
        CalibrationMode
        .Where(b => b)
        .Take(1)
        .Subscribe(x =>
        {
            CalibrationMode.Value = false;
            AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}");
            Observable.Timer(TimeSpan.FromSeconds(1f))
            .Subscribe(_ => SceneManager.LoadScene(Open4thLane?"MainScene_4Lane_Cal":"MainScene_3Lane_Cal"))
            .AddTo(gameObject);
        })
        .AddTo(gameObject);
        //to main game
        GameMode
        .Where(b => b)
        .Take(1)
        .Subscribe(x =>
        {
            GameMode.Value = false;
            AppStateBroker.Instance.ComOutGoingStream.OnNext("{state:30}");
            Observable.Timer(TimeSpan.FromSeconds(1f))
            .Subscribe(_ =>
            {
                SceneManager.LoadScene(Open4thLane ? "MainScene_4Lane" : "MainScene_3Lane");
            })
            .AddTo(gameObject);
        })
        .AddTo(gameObject);
        //auto test
        if (AutoTest)
        {
            DebugOutputObjects.SetActive(true);
            ManualTeamSelectAllowed = ManualTeamSelectAllowedExternal = false;
            Observable.EveryUpdate().Select(_ => TestCount).Subscribe(x =>
            {
                DubugOutput.text = x.ToString();
                ThrowAllowed.gameObject.SetActive(TestCount % 2 != 0);
            }).AddTo(gameObject);

            _appStateBroker
            .CurrentRound
            .Subscribe(round =>
            {
                switch (round)
                {
                case Rounds.Idle:
                    Observable.Timer(TimeSpan.FromSeconds(2f))
                    .Take(1)
                    .Subscribe(_ =>
                    {
                        var len = Open4thLane ? 4 : 3;
                        for (int i = 0; i < len; i++)
                        {
                            var client     = new ORTCPEventParams();
                            var team       = AutoTestIndexProvider.GetTeamIndex();
                            client.message = "{\"state\":10,\"station_id\":" + i + ",\"team\":" + team + "}";
                            _appStateBroker.ComReceivingStream.OnNext(client);
                        }

                        DelayedSanp();
                    }).AddTo(gameObject);
                    break;

                case Rounds.R1:
                case Rounds.R2:
                case Rounds.R3:
                    DelayedSanp();
                    break;

                case Rounds.Finish:
                    DelayedSanp();
                    TestCount++;
                    Debug.LogFormat("[{0}] Testing Count : {1}", name, TestCount);
                    break;
                }
            })
            .AddTo(gameObject);
        }
        else
        {
            DebugOutputObjects.SetActive(false);
        }
    }