C# Spara data från fil till en klass.
Tjena. Jag håller på med en uppgift där jag ska skapa ett program som kontrollerar ifall en användare har ett giltigt Guldkort.
Guldkortet innehåller 4 olika karaktären som belöning. Dessa belöningar kan tilldelas till en användare om användarens kortdata som användardata är giltigt.
Jag har ett annat program som kommunicerar med mitt server program som en klient. Detta klient program skicka enstaka strängar till mitt serverprogram enligt följande format. A8656186-K117247315. Mitt program ska kunna dela på informationen till två separata strängar och testa dessa nya strängar mot en fil innehållande lista med kunddata och en fil innehållande med kortdata.
Kunddatans format i filen A1234567###Jason Bourne###Stockholm. Kortdatans format i filen, K123456789###Kristallhäst.
Mitt Huvudsakliga problem jag stött på är att jag inte lyckas lägga till kortdata egenskaper till User klassen utan det läggs bara till för senast skapad User.
Hur lyckas jag även skapa nya strängar av den information jag får inom strängen message från TCP klienten som jag sedan ska jämföra med User klassen som kontrollerar om en User finns eller inte.
Koden är långt ifrån klar och oorganiserad:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Guldkortet
{
public partial class Form1 : Form
{
TcpClient client;
TcpListener listener;
int port = 12345;
List<User> userData = new List<User>();
//Mesage tar emot bytedata och konverteras till Unicode sträng.
string message;
string data;
//Splittad sträng från NOS_export lagras vector.
string[] vector;
public Form1()
{
InitializeComponent();
//client.NoDelay = true;
// User object
StreamReaderUserData(userData);
}
private void BtnConnect_Click(object sender, EventArgs e)
{
try
{
listener = new TcpListener(IPAddress.Any, port);
listener.Start();
}
catch (Exception error) { MessageBox.Show(error.Message, Text); return; }
{
BtnConnect.Enabled = false;
StartReceiver(); // StartReceiver() HERE !!
}
}
public async void StartReceiver()
{
try
{
client = await listener.AcceptTcpClientAsync();
}
catch (Exception error) { MessageBox.Show(error.Message, Text); return; }
StartReader(client); // StartReader() HERE !!
}
public async void StartReader(TcpClient c)
{
byte[] buffert = new byte[1024];
int n = 0;
try
{
n = await c.GetStream().ReadAsync(buffert, 0, buffert.Length);
message = Encoding.Unicode.GetString(buffert, 0, n);
}
catch (Exception error)
{
MessageBox.Show(error.Message, this.Text);
return;
}
StartReader(c);
data = message;
// Splittar på datan som skickas från NOS_export.
SplitterCheckData(data, userData);
}
//splits message into two strings and compares the data with the strings in the list.
public void SplitterCheckData(string data, List<User> list)
{
List<string[]> cData = new List<string[]>();
vector = data.Split(new string[] { "-" }, StringSplitOptions.None);
cData.Add(vector);
foreach (string[] item in cData)
{
ReturnData.AppendText(item[0] + " SEPARATOR " + item[1] + "\r\n");
}
}
// Opens a path to directed file
public void StreamReaderUserData(List<User> list)
{
User newUser;
string item = "";
string[] vektor;
List<string> userSaver = new List<string>();
List<string[]> strVektor = new List<string[]>();
StreamReader reader = new StreamReader("kundlista.txt", Encoding.Default, true);
if (File.Exists("kundlista.txt"))
{
while ((item = reader.ReadLine()) != null)
userSaver.Add(item);
foreach (string s in userSaver)
{
vektor = s.Split(new string[] { "###" }, StringSplitOptions.None);
strVektor.Add(vektor);
newUser = new User();
list.Add(newUser);
newUser.UserNumber = vektor[0];
newUser.Name = vektor[1];
newUser.City = vektor[2];
}
// Strömmen strängs.
reader.Close();
}
}
public void StreamReaderCardData(List<User> list)
{
User newUser;
string item = "";
string[] vektor;
List<string> userSaver = new List<string>();
List<string[]> strVektor = new List<string[]>();
StreamReader reader = new StreamReader("kortlista.txt");
}
private void BtnLoadList_Click(object sender, EventArgs e)
{
LbReturnData.Items.AddRange(userData.ToArray());
}
}
public class User
{
public string UserNumber { get; set; }
public string CardNumber { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string GoldCard { get; set; }
public override string ToString()
{
return UserNumber + "-" + CardNumber + " " + Name + ". From " + City + " || " + GoldCard;
}
}
public class GoldCard
{
public string Health { get; set; }
public string Power { get; set; }
public string ElementalSkill { get; set; }
}
public class Dunderkatt : GoldCard
{
public override string ToString()
{
return base.ToString();
}
}
public class Kristallhäst : GoldCard
{
public override string ToString()
{
return base.ToString();
}
}
public class Överpanda : GoldCard
{
public override string ToString()
{
return base.ToString();
}
}
public class Eldtomat : GoldCard
{
public override string ToString()
{
return base.ToString();
}
}
}