/// <see cref="DssEventHandler.PackageArrivedDuringSetupStage_i"/> protected override void PackageArrivedDuringSetupStage_i(RCPackage package, int senderID) { /// If the sender of the package is the host --> error if (senderID == 0) { this.root.Session.SetupStageError(); } /// Otherwise we ignore the package TraceManager.WriteAllTrace(string.Format("WARNING! Package arrived from operator-{0} during setup stage: {1}. Package will be ignored!", senderID, package.ToString()), DssTraceFilters.SETUP_STAGE_ERROR); }
/// <summary> /// Called when a NETWORK_CUSTOM_PACKAGE has arrived from the lobby. /// </summary> /// <remarks>Must be implemented at both server and client side.</remarks> public virtual void PackageArrivedHdl(int timestamp, RCPackage package, int senderID) { if (IsSimulationRunning_i()) { /// Package arrived during simulation stage must be handled. if (package.PackageFormat.ID == DssRoot.DSS_COMMAND) { if (!CommandPackageArrived(package, senderID)) { this.root.SimulationMgr.SimulationStageError(string.Format("Processing incoming DSS_COMMAND package failed. Sender: {0}. Package: {1}", senderID, package.ToString()), new byte[] { }); } } else if (package.PackageFormat.ID == DssRoot.DSS_COMMIT) { if (!this.root.SimulationMgr.RegisterCommit(package, senderID)) { this.root.SimulationMgr.SimulationStageError(string.Format("Processing incoming DSS_COMMIT package failed. Sender: {0}. Package: {1}", senderID, package.ToString()), new byte[] { }); } } else if (package.PackageFormat.ID == DssRoot.DSS_COMMIT_ANSWER) { if (!this.root.SimulationMgr.RegisterCommitAnswer(package, senderID)) { this.root.SimulationMgr.SimulationStageError(string.Format("Processing incoming DSS_COMMIT_ANSWER package failed. Sender: {0}. Package: {1}", senderID, package.ToString()), new byte[] { }); } } else if (package.PackageFormat.ID == DssRoot.DSS_LEAVE) { if (this.root.SimulationMgr.RegisterLeaveMessage(package, senderID)) { this.root.OperatorLeftSimulationStage(senderID); } else { this.root.SimulationMgr.SimulationStageError(string.Format("Processing incoming DSS_LEAVE package failed. Sender: {0}. Package: {1}", senderID, package.ToString()), new byte[] { }); } } else if (package.PackageFormat.ID == DssRoot.DSS_SIM_ERROR) { string errorDescr = package.ReadString(0); byte[] customData = package.ReadByteArray(1); this.root.SimulationMgr.SimulationStageErrorReceived(string.Format("DSS_SIM_ERROR received from operator-{0}: {1}", senderID, errorDescr), customData); } else { this.root.SimulationMgr.SimulationStageError(string.Format("Unexpected package arrived from operator-{0}: {1}", senderID, package.ToString()), new byte[] { }); } } else { /// Package arrived during setup stage is not allowed. PackageArrivedDuringSetupStage_i(package, senderID); } }
/// <see cref="LobbyConnection.SendPackage_i"/> protected override bool SendPackage_i(RCPackage packageToSend) { TraceManager.WriteAllTrace(string.Format("SendPackage: {0} local-{1} remote-{2}", packageToSend.ToString(), this.connection.Client.LocalEndPoint.ToString(), this.connection.Client.RemoteEndPoint.ToString()), NetworkingSystemTraceFilters.INFO); return(SendPackageToStream_i(packageToSend, this.stream)); }
static void Main(string[] args) { ConfigurationManager.Initialize("../../../../config/RC.NetworkingSystem.TestConsole/RC.NetworkingSystem.TestConsole.root"); RCPackageFormat f0 = new RCPackageFormat(); RCPackageFormat f1 = new RCPackageFormat(); RCPackageFormat f2 = new RCPackageFormat(); f0.DefineField(RCPackageFieldType.SHORT); f0.DefineField(RCPackageFieldType.SHORT_ARRAY); f0.DefineField(RCPackageFieldType.STRING_ARRAY); f0.DefineField(RCPackageFieldType.STRING); f0.DefineField(RCPackageFieldType.INT); f0.DefineField(RCPackageFieldType.INT_ARRAY); f1.DefineField(RCPackageFieldType.LONG); f1.DefineField(RCPackageFieldType.LONG_ARRAY); f1.DefineField(RCPackageFieldType.BYTE_ARRAY); f1.DefineField(RCPackageFieldType.BYTE); f1.DefineField(RCPackageFieldType.STRING); f2.DefineField(RCPackageFieldType.BYTE); f2.DefineField(RCPackageFieldType.BYTE_ARRAY); f2.DefineField(RCPackageFieldType.LONG_ARRAY); f2.DefineField(RCPackageFieldType.LONG); f2.DefineField(RCPackageFieldType.INT); f2.DefineField(RCPackageFieldType.STRING_ARRAY); RCPackageFormat.RegisterFormat(f0, 65000); RCPackageFormat.RegisterFormat(f1, 65001); RCPackageFormat.RegisterFormat(f2, 65002); /// WRITING TextWriter writer = new StreamWriter("write.txt"); byte[] buffer = new byte[10000000]; int pos = 0; for (int i = 0; i < 10000; i++) { RCPackage newPackage = GenerateRandomPackage(); TraceManager.WriteAllTrace(string.Format("{0}: {1}", i, newPackage.ToString()), TraceManager.GetTraceFilterID("RC.NetworkingSystem.TestConsole.Info")); writer.WriteLine(i + ": " + newPackage.ToString()); pos += newPackage.WritePackageToBuffer(buffer, pos); } writer.Close(); /// WRITING BINARY DATA0 FileStream binStr = new FileStream("bin0.txt", FileMode.Create); binStr.Write(buffer, 0, pos); binStr.Close(); /// READING pos = 0; int parsedBytes = 0; RCPackage currPackage = null; int count = 0; writer = new StreamWriter("read.txt"); byte[] buffer2 = new byte[10000000]; int pos2 = 0; while (true) { int burst = rnd.Next(1, 50); pos += parsedBytes; currPackage = RCPackage.Parse(buffer, pos, burst, out parsedBytes); if (currPackage != null) { bool error = false; while (!currPackage.IsCommitted) { pos += parsedBytes; burst = rnd.Next(1, 50); if (!currPackage.ContinueParse(buffer, pos, burst, out parsedBytes)) { TraceManager.WriteAllTrace("Syntax error", TraceManager.GetTraceFilterID("RC.NetworkingSystem.TestConsole.Info")); writer.WriteLine("Syntax error"); error = true; } } if (!error) { TraceManager.WriteAllTrace(string.Format("{0}: {1}", count, currPackage.ToString()), TraceManager.GetTraceFilterID("RC.NetworkingSystem.TestConsole.Info")); writer.WriteLine(count + ": " + currPackage.ToString()); pos2 += currPackage.WritePackageToBuffer(buffer2, pos2); count++; } else { break; } } else { TraceManager.WriteAllTrace("Syntax error", TraceManager.GetTraceFilterID("RC.NetworkingSystem.TestConsole.Info")); writer.WriteLine("Syntax error"); break; } } writer.Close(); /// WRITING BINARY DATA1 binStr = new FileStream("bin1.txt", FileMode.Create); binStr.Write(buffer2, 0, pos2); binStr.Close(); TraceManager.WriteAllTrace("READY", TraceManager.GetTraceFilterID("RC.NetworkingSystem.TestConsole.Info")); Console.ReadLine(); }
public void HostCommand(RCPackage command) { TraceManager.WriteAllTrace(string.Format("SIMULATOR_CALL: Host command: {0}", command.ToString()), TestConsoleTraceFilters.TEST_INFO); }
public void GuestCommand(int guestIndex, RCPackage command) { TraceManager.WriteAllTrace(string.Format("SIMULATOR_CALL: Guest-{0} Command: {1}", guestIndex, command.ToString()), TestConsoleTraceFilters.TEST_INFO); }