Exemple #1
0
        public void Start(string username)
        {
            _stopFlag = false;
            _username = username;

            var hostname = SettingsHelper.GetSetting("ServerHost");

            CreateConnection(hostname);

            _udpClient = new UdpClient();
            _udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            _udpClient.ExclusiveAddressUse = false;
            //_udpClient.Connect(SettingsHelper.GetSetting("ServerHost"), 5565);
            //_udpClient.Connect("localhost", 5565);
            //_udpClient.BeginReceive(OnUdpData, _udpClient);

            _injectorThread = new Thread(ProcessPackets)
            {
                Priority = ThreadPriority.AboveNormal, IsBackground = true
            };
            _injectorThread.Start();

            _userDataUpdateThread = new Thread(async() =>
            {
                while (!_stopFlag)
                {
                    try
                    {
                        var stopwatch = new Stopwatch();
                        stopwatch.Start();
                        await _connection.InvokeAsync <string>("Ping");
                        stopwatch.Stop();

                        var clients = await _connection.InvokeAsync <List <ClientConnection> >("GetClients");
                        OnPing?.Invoke(this, new OnPingEventArgs {
                            Ping = stopwatch.ElapsedMilliseconds
                        });
                        OnClientListReceived?.Invoke(this, new OnClientListReceivedEventArgs {
                            Clients = clients
                        });
                        await Task.Delay(5000);
                    }
                    catch (Exception e)
                    {
                        Stop();
                        return;
                    }
                }
            })
            {
                IsBackground = true
            };
        }
Exemple #2
0
        private void handleData(Sentence data)
        {
            try
            {
                switch (data.getMessageType())
                {
                case Sentence.Type.SERVER_MESSAGE:
                {
                    OnChatReceived?.Invoke($"{data.getSender()}: {data.getData()}\r\n");
                    break;
                }

                case Sentence.Type.USERSMESSAGE:
                {
                    OnClientListReceived?.Invoke(data.Data);
                    Console.WriteLine("All clients: ");
                    Console.WriteLine(data.Data);
                    break;
                }

                case Sentence.Type.DISCONNECT_REQUEST:
                {
                    SendData("$DISCONNECT");
                    OnMessageBoxShow?.Invoke($"You got kicked!\nReason: {data.getData()}", MessageBoxButtons.OK);
                    break;
                }

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Exemple #3
0
        private void handleData(DataPacket data)
        {
            switch (data.type)
            {
            case "LOGINRESPONSE":
            {
                DataPacket <LoginResponse> d = data.GetData <LoginResponse>();
                if (d.data.status == "OK" && !d.data.isClient)
                {
                    this.loggedIn = true;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("You are logged in!");
                }
                else if (d.data.status == ("ERROR"))
                {
                    this.loggedIn = false;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("Your username and/or password is not valid!");
                }
                break;
            }

            case "CHAT":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();

                OnChatReceived?.Invoke(d.sender, d.data.receiver, $"{d.sender}: {d.data.chatMessage}\r\n", d.data.isDoctorMessage);
                break;
            }

            case "RESPONSE_CLIENTLIST":
            {
                DataPacket <ClientListPacket> d = data.GetData <ClientListPacket>();
                OnClientListReceived?.Invoke(d.data.clientList);
                break;
            }

            case "BIKEDATA":
            {
                DataPacket <BikeDataPacket> d = data.GetData <BikeDataPacket>();
                OnBikeDataReceived?.Invoke(d);
                break;
            }

            case "RESPONSE_SESSIONSTATE":
            {
                DataPacket <ResponseSessionStatePacket> d = data.GetData <ResponseSessionStatePacket>();
                OnSessionStateReceived?.Invoke(d.data.receiver, d.data.startTimeSession, d.data.sessionState);
                break;
            }

            case "SESSIONSTATE_RESPONSE":
            {
                DataPacket <StartStopPacket> d = data.GetData <StartStopPacket>();
                OnSessionStateMessageReceived?.Invoke(d.sender, d.data.startSession);
                break;
            }

            case "RESPONSE_BIKE_STATE":
            {
                DataPacket <ResponseBikeState> d = data.GetData <ResponseBikeState>();
                OnBikeStateChanged?.Invoke(d.sender, d.data.bikeIsConnected);
                break;
            }

            case "SESSIONSTATE_EMERGENCYRESPONSE":
            {
                DataPacket <EmergencyResponsePacket> d = data.GetData <EmergencyResponsePacket>();
                OnEmergencyResponse?.Invoke(d.sender, d.data.state);
                break;
            }

            case "RESPONSE_TRAINING_LIST":
            {
                DataPacket <ResponseTrainingList> d = data.GetData <ResponseTrainingList>();
                this.OnTrainingListReceived?.Invoke(d.data.forClient, d.data.trainingList);
                break;
            }

            case "RESPONSE_TRAINING_DATA":
            {
                DataPacket <ResponseTrainingData> d = data.GetData <ResponseTrainingData>();
                this.OnTrainingDataReceived?.Invoke(d.data.forClient, d.data.trainingName, d.data.trainingData);
                break;
            }

            case "DISCONNECT_REQUEST":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();
                Disconnect();
                break;
            }

            default:
                Console.WriteLine("Type is not valid");
                break;
            }
        }