5 Commits

Author SHA1 Message Date
Sem van der Hoeven
1f163325cf [FIX] fixed the panel not showing, it was because of the animation. removed it for now and it works 2020-10-29 17:09:20 +01:00
Sem van der Hoeven
1c7f9cf70a [FIX] fixed doctor buffer overflow 2020-10-28 13:23:20 +01:00
Sem van der Hoeven
5f2e325cb1 [ADD] added chat to all method from docter, it works but there is sometimes an error in the doctor client app that the buffer in OnRead is full, so will try to fix that tomorrow 2020-10-27 21:35:07 +01:00
Sem van der Hoeven
cda8b47ca3 [
ADD] added message sending to all clients, doesn't work yet
2020-10-27 21:24:47 +01:00
Sem van der Hoeven
fab3ed7705 [EDIT] made seperate method for sending message 2020-10-27 20:59:46 +01:00
9 changed files with 63 additions and 26 deletions

View File

@@ -43,7 +43,7 @@ namespace ClientApp.Utils
/// </summary>
private void initEngine()
{
Debug.WriteLine("init engine");
Debug.WriteLine("[CLIENT] init engine");
engineConnection = EngineConnection.INSTANCE;
engineConnection.OnNoTunnelId = RetryEngineConnection;
engineConnection.OnSuccessFullConnection = engineConnected;
@@ -190,6 +190,9 @@ namespace ClientApp.Utils
expectedMessageLength = BitConverter.ToInt32(totalBuffer, 0);
}
if (ar == null || (!ar.IsCompleted) || (!this.stream.CanRead) || !this.client.Connected)
return;
ar.AsyncWaitHandle.WaitOne();
this.stream.BeginRead(this.buffer, 0, this.buffer.Length, new AsyncCallback(OnRead), null);
}

View File

@@ -27,7 +27,7 @@ namespace ClientApp.Utils
//new PC("DESKTOP-M2CIH87", "Fabian"),
//new PC("T470S", "Shinichi"),
//new PC("DESKTOP-DHS478C", "semme"),
//new PC("HP-ZBOOK-SEM", "Sem")
new PC("HP-ZBOOK-SEM", "Sem")
//new PC("DESKTOP-TV73FKO", "Wouter"),
//new PC("DESKTOP-SINMKT1", "Ralf van Aert"),
//new PC("NA", "Bart")
@@ -71,7 +71,7 @@ namespace ClientApp.Utils
updateTimer.AutoReset = true;
updateTimer.Enabled = false;
noVRResponseTimer = new System.Timers.Timer(15000);
noVRResponseTimer = new System.Timers.Timer(30000);
noVRResponseTimer.Elapsed += noVRResponseTimeout;
noVRResponseTimer.AutoReset = false;
noVRResponseTimer.Enabled = false;
@@ -236,14 +236,14 @@ namespace ClientApp.Utils
Write("Starting route follow...");
FollowingRoute = true;
SendMessageAndOnResponse(mainCommand.AddBikeModelAnim("bikeID", 0.01f), "bikeID",
SendMessageAndOnResponse(mainCommand.AddBikeModel("bikeID"), "bikeID",
(message) =>
{
bikeId = JSONParser.GetResponseUuid(message);
SendMessageAndOnResponse(mainCommand.addPanel("panelAdd", bikeId), "panelAdd",
(message) =>
{
Write("got panel id");
panelId = JSONParser.getPanelID(message);
WriteTextMessage(mainCommand.ColorPanel(panelId));
@@ -295,6 +295,7 @@ namespace ClientApp.Utils
public void UpdateInfoPanel()
{
Write("updating info panel");
ShowPanel(BikeSpeed, (int)BikeBPM, (int)BikePower, (int)BikeResistance);
WriteTextMessage(mainCommand.RouteSpeed(BikeSpeed, bikeId));
WriteTextMessage(mainCommand.RouteSpeed(BikeSpeed, cameraId));

View File

@@ -129,7 +129,7 @@ namespace DoctorApp.Utils
{
MainViewModel.TransferDataToClientBPM(payloadbytes);
}
Array.Copy(totalBuffer, expectedMessageLength, totalBuffer, 0, (totalBufferReceived - expectedMessageLength)); //maybe unsafe idk
totalBufferReceived -= expectedMessageLength;
expectedMessageLength = BitConverter.ToInt32(totalBuffer, 0);
}

View File

@@ -43,12 +43,14 @@ namespace DoctorApp.ViewModels
public MainWindowViewModel MainWindowViewModel { get; set; }
private Client client;
private MainViewModel parent;
public Chart Chart { get; set; }
public ClientInfoViewModel(MainWindowViewModel mainWindowViewModel, string username)
public ClientInfoViewModel(MainViewModel parent,MainWindowViewModel mainWindowViewModel, string username)
{
MainWindowViewModel = mainWindowViewModel;
this.parent = parent;
this.PatientInfo = new PatientInfo() { Username = username, Status = "Waiting to start" };
this.Chart = new Chart(this.PatientInfo);
PatientInfo.ChatLog = new ObservableCollection<string>();
@@ -68,12 +70,17 @@ namespace DoctorApp.ViewModels
Chat = new RelayCommand<object>((parameter) =>
{
client.sendMessage(DataParser.getChatJson(PatientInfo.Username, ((TextBox)parameter).Text));
PatientInfo.ChatLog.Add(DateTime.Now + ": " + ((TextBox)parameter).Text);
SendMessageToClient(PatientInfo.Username, ((TextBox)parameter).Text);
});
//TODO RelayCommand ChatToAll
ChatToAll = new RelayCommand<object>((parameter) =>
{
Debug.WriteLine("[CLIENTINFOVIEWMODEL] sending message to all clients");
this.parent?.SendToAllClients(((TextBox)parameter).Text);
});
SetResistance = new RelayCommand<object>((parameter) =>
{
Debug.WriteLine("resistance");
@@ -83,6 +90,12 @@ namespace DoctorApp.ViewModels
}
public void SendMessageToClient(string username, string text)
{
client.sendMessage(DataParser.getChatJson(username, text));
PatientInfo.ChatLog.Add(DateTime.Now + ": " + text);
}
public void BPMData(byte [] bytes)
{
//TODO

View File

@@ -30,7 +30,7 @@ namespace DoctorApp.ViewModels
Debug.WriteLine("new tab with name " + username);
App.Current.Dispatcher.Invoke((Action)delegate
{
Tabs.Add(new ClientInfoViewModel(MainWindowViewModel, username));
Tabs.Add(new ClientInfoViewModel(this,MainWindowViewModel, username));
});
}
@@ -72,6 +72,15 @@ namespace DoctorApp.ViewModels
}
}
}
internal void SendToAllClients(string text)
{
Debug.WriteLine("[MAINVIEWMODEL] Sending message to all clients: " + text);
foreach (ClientInfoViewModel item in Tabs)
{
item.SendMessageToClient(item.PatientInfo.Username, text);
}
}
}

View File

@@ -6,6 +6,7 @@ using System.Windows.Input;
using DoctorApp.Models;
using DoctorApp.Utils;
using Util.MagicCode;
using System;
namespace DoctorApp.ViewModels
{

View File

@@ -57,6 +57,7 @@
<ListBox Name="ChatBox" ItemsSource="{Binding PatientInfo.ChatLog}" Grid.Column="1" Margin="59,41,0,0" Grid.RowSpan="3"/>
<TextBox Name="textBox_Chat" Grid.Column="1" HorizontalAlignment="Left" Margin="59,10,0,0" Grid.Row="3" Text="" TextWrapping="Wrap" VerticalAlignment="Top" Width="235"/>
<Button x:Name="Send" Content="Send" Grid.Column="1" HorizontalAlignment="Left" Margin="59,33,0,0" Grid.Row="3" VerticalAlignment="Top" Command="{Binding Chat}" CommandParameter="{Binding ElementName=textBox_Chat}"/>
<Button x:Name="SendToAll" Content="Send to all clients" Grid.Column="1" HorizontalAlignment="Left" Margin="107,33,0,0" Grid.Row="3" VerticalAlignment="Top" Command="{Binding ChatToAll}" CommandParameter="{Binding ElementName=textBox_Chat}"/>
<Button Content="Start Session" Grid.Column="1" HorizontalAlignment="Left" Margin="69,86,0,0" Grid.Row="3" VerticalAlignment="Top" Width="97" Command="{Binding StartSession}" CommandParameter=""/>
<Button Content="Stop Session" Grid.Column="1" HorizontalAlignment="Left" Margin="187,86,0,0" Grid.Row="3" VerticalAlignment="Top" Width="97" Command="{Binding StopSession}" CommandParameter=""/>
<TextBox x:Name="textBox_SetResistance" Grid.Column="1" HorizontalAlignment="Left" Margin="69,128,0,0" Grid.Row="3" TextWrapping="Wrap" VerticalAlignment="Top" Width="97"/>

View File

@@ -124,11 +124,13 @@ namespace RH_Engine
position = new float[]
{
-1.5f, 1f, 0f
//0f,0f,0f
},
scale = 1,
rotation = new int[]
{
-30, 90,0
//0,0,0
}
},
panel = new

View File

@@ -19,9 +19,9 @@ namespace RH_Engine
//new PC("DESKTOP-M2CIH87", "Fabian"),
//new PC("T470S", "Shinichi"),
//new PC("DESKTOP-DHS478C", "semme"),
//new PC("HP-ZBOOK-SEM", "Sem"),
new PC("HP-ZBOOK-SEM", "Sem"),
//new PC("DESKTOP-TV73FKO", "Wouter"),
new PC("DESKTOP-SINMKT1", "Ralf van Aert"),
//new PC("DESKTOP-SINMKT1", "Ralf van Aert"),
//new PC("NA", "Bart")
};
@@ -94,7 +94,7 @@ namespace RH_Engine
if (serialResponses.ContainsKey(serial))
{
serialResponses[serial].Invoke(message);
serialResponses.Remove(serial);
//serialResponses.Remove(serial);
}
}
}
@@ -181,39 +181,41 @@ namespace RH_Engine
//Force(stream, mainCommand.DeleteNode(handRightId, "deleteHandR"), "deleteHandR", (message) => Console.WriteLine("Right hand deleted"));
});
CreateTerrain(stream, mainCommand);
//CreateTerrain(stream, mainCommand);
//Add route, bike and put camera and bike to follow route at same speed.
SendMessageAndOnResponse(stream, mainCommand.RouteCommand("routeID"), "routeID", (message) => routeId = JSONParser.GetResponseUuid(message));
//SendMessageAndOnResponse(stream, mainCommand.RouteCommand("routeID"), "routeID", (message) => routeId = JSONParser.GetResponseUuid(message));
SendMessageAndOnResponse(stream, mainCommand.AddBikeModelAnim("bikeID",0.01f), "bikeID",
(message) =>
{
bikeId = JSONParser.GetResponseUuid(message);
Console.WriteLine("got bike id " + bikeId);
SendMessageAndOnResponse(stream, mainCommand.addPanel("panelAdd", bikeId), "panelAdd",
(message) =>
{
bool speedReplied = false;
bool moveReplied = true;
Console.WriteLine(message);
panelId = JSONParser.getPanelID(message);
Console.WriteLine("got panel id " + panelId);
showPanel(stream, mainCommand);
//while (!(speedReplied && moveReplied)) { }
while (cameraId == string.Empty) { }
SetFollowSpeed(5.0f, stream, mainCommand);
WriteTextMessage(stream, mainCommand.RoadCommand(routeId, "road"));
WriteTextMessage(stream, mainCommand.ShowRoute("showRouteFalse", false));
//while (cameraId == string.Empty) { }
//SetFollowSpeed(5.0f, stream, mainCommand);
//WriteTextMessage(stream, mainCommand.RoadCommand(routeId, "road"));
//WriteTextMessage(stream, mainCommand.ShowRoute("showRouteFalse", false));
});
});
string groundplaneId = GetId("GroundPlane", stream, mainCommand);
WriteTextMessage(stream, mainCommand.DeleteNode(groundplaneId, "none"));
//string groundplaneId = GetId("GroundPlane", stream, mainCommand);
//WriteTextMessage(stream, mainCommand.DeleteNode(groundplaneId, "none"));
PlaceHouses(stream, mainCommand);
//PlaceHouses(stream, mainCommand);
WriteTextMessage(stream, mainCommand.SkyboxCommand(DateTime.Now.Hour));
//WriteTextMessage(stream, mainCommand.SkyboxCommand(DateTime.Now.Hour));
}
@@ -343,31 +345,36 @@ namespace RH_Engine
private static void showPanel(NetworkStream stream, Command mainCommand)
{
WriteTextMessage(stream, mainCommand.ColorPanel(panelId));
//WriteTextMessage(stream, mainCommand.ColorPanel(panelId));
WriteTextMessage(stream, mainCommand.ClearPanel(panelId));
SendMessageAndOnResponse(stream, mainCommand.showBikespeed(panelId, "bikeSpeed", bikeSpeed), "bikeSpeed",
(message) =>
{
Console.WriteLine(message);
// TODO check if is drawn
});
SendMessageAndOnResponse(stream, mainCommand.showHeartrate(panelId, "bpm", bpm), "bpm",
(message) =>
{
Console.WriteLine(message);
// TODO check if is drawn
});
SendMessageAndOnResponse(stream, mainCommand.showPower(panelId, "power", power), "power",
(message) =>
{
Console.WriteLine(message);
// TODO check if is drawn
});
SendMessageAndOnResponse(stream, mainCommand.showResistance(panelId, "resistance", resistance), "resistance",
(message) =>
{
Console.WriteLine(message);
// TODO check if is drawn
});
SendMessageAndOnResponse(stream, mainCommand.showMessage(panelId, "message", lastMessage), "message",
(message) =>
{
Console.WriteLine(message);
// TODO check if is drawn
});