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 }; }
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); } }
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; } }