Я работаю над библиотекой, которая поможет реализовать выделенные серверы для всех видов приложений (в основном моя цель - игры).Я работаю с сокетами и хочу внедрить какую-то систему команд, где пользователи смогут вызывать функции на сервере.У меня проблема, потому что я хочу позволить пользователю реализовать интерактивную командную среду в созданном им классе, о котором моя библиотека должна знать.Я создал этот шаблонный пример того, как все это структурировано:
Реализовано мной, часть библиотеки (очень упрощенно):
public class UserInfo //class containing info about user
{
public int id;
public UserInfo(int _id)
{
id = _id;
}
}
public class UserManager
{
List<UserInfo> userInfos;
public UserManager(List<UserInfo> _userInfos) //We get out infos from somewhere...
{
userInfos = _userInfos; //...and keep reference to them
//SetupChildClassAndInfos();
}
//I'd like to have something like that BUT I don't know
//how ChildClass is called so I can't just type it like here
/*
List<ChildClass> childs = new List<ChildClass>();
void SetupChildClassAndInfos()
{
foreach (var userInfo in userInfos)
{
ChildClass child = new ChildClass();
child.someInfo = userInfo;
childs.Add(child);
}
}
*/
//I tried working with generics but failed miserably xd
List<T> childs = new List<T>();
public void GetChildClass<T>()
{
foreach (var userInfo in userInfos)
{
T child = new T();
child.userInfo = userInfo;
childs.Add(child);
}
}
//of course it doesn't work and makes no sense xD but I hope you kinda g
//get what I'm trying to accomplish
}
public class UserClass //Base class for further implementation containing
//userInfo that user needs to know about
{
public UserInfo userInfo;
}
Пример реализации кем-то другим, я не знаю какChildClass будет называться:
public class ChildClass : UserClass //there needs to be access to UserClass informations
{
CustomManager customManager;
[Command] //attribute making method be called automaticly when is the right time
public void Message(string _message) //A method made by a user BUT(!) he will never use it directly
{
customManager.ReceiveMessage(userInfo.id, _message);
}
}
public class CustomManager
{
UserManager userManager; //assume we somehow have reference
public CustomManager()
{
userManager.GetChildClass<ChildClass>(); //sending information in beginning to infoManager how I implemented my ChildClass (doesn't work)
}
public void ReceiveMessage(int _id, string _message)
{
Debug.Log("We got message: " + _message + " from user with id: " + _id);
}
}
Поэтому мой вопрос заключается в том, как отправить пользовательский класс в UserManager и создать экземпляры этого класса?Возможно, то, что я пишу, не имеет никакого смысла, и мой подход глуп, не стесняйтесь критиковать.