Есть вот такая идея - написать простенький авторитарный сервер в Microsoft Visual Studio используя Win формы и Utity библиотеки.
Unity3d
Создал новую сцену и на камеру кинул скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Connect : MonoBehaviour
{
public string connectToIP = "127.0.0.1";
public int connectPort = 45678;
// Смешанный GUI для сервера и клиента
public void OnGUI()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
//Сейчас мы отключены и не являемся клиентом или хостом
GUILayout.Label("Connection status: Disconnected");
connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));
connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));
GUILayout.BeginVertical();
if (GUILayout.Button("Connect as client"))
{
// Подсоединяемся к "connectToIP" и "connectPort" как клиент
// В данном случае игнорируем NAT
Network.useNat = false;
Network.Connect(connectToIP, connectPort);
}
if (GUILayout.Button("Start Server"))
{
// Создаем север с 32 клиентами используя порт "connectPort"
// Так же игнорируем NAT
Network.useNat = false;
Network.InitializeServer(32, connectPort);
}
GUILayout.EndVertical();
}
else
{
//Мы имеем подключение(я)!
if (Network.peerType == NetworkPeerType.Connecting)
{
// Статус - пдключение
GUILayout.Label("Connection status: Connecting");
}
else if (Network.peerType == NetworkPeerType.Client)
{
// Статус - клиент
GUILayout.Label("Connection status: Client!");
GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));
}
else if (Network.peerType == NetworkPeerType.Server)
{
// Статус - сервер
GUILayout.Label("Connection status: Server!");
GUILayout.Label("Connections: " + Network.connections.Length);
}
}
if (GUILayout.Button("Disconnect"))
{
Network.Disconnect(200);
}
}
}
}
using System.Collections;
public class Connect : MonoBehaviour
{
public string connectToIP = "127.0.0.1";
public int connectPort = 45678;
// Смешанный GUI для сервера и клиента
public void OnGUI()
{
if (Network.peerType == NetworkPeerType.Disconnected)
{
//Сейчас мы отключены и не являемся клиентом или хостом
GUILayout.Label("Connection status: Disconnected");
connectToIP = GUILayout.TextField(connectToIP, GUILayout.MinWidth(100));
connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));
GUILayout.BeginVertical();
if (GUILayout.Button("Connect as client"))
{
// Подсоединяемся к "connectToIP" и "connectPort" как клиент
// В данном случае игнорируем NAT
Network.useNat = false;
Network.Connect(connectToIP, connectPort);
}
if (GUILayout.Button("Start Server"))
{
// Создаем север с 32 клиентами используя порт "connectPort"
// Так же игнорируем NAT
Network.useNat = false;
Network.InitializeServer(32, connectPort);
}
GUILayout.EndVertical();
}
else
{
//Мы имеем подключение(я)!
if (Network.peerType == NetworkPeerType.Connecting)
{
// Статус - пдключение
GUILayout.Label("Connection status: Connecting");
}
else if (Network.peerType == NetworkPeerType.Client)
{
// Статус - клиент
GUILayout.Label("Connection status: Client!");
GUILayout.Label("Ping to server: " + Network.GetAveragePing(Network.connections[0]));
}
else if (Network.peerType == NetworkPeerType.Server)
{
// Статус - сервер
GUILayout.Label("Connection status: Server!");
GUILayout.Label("Connections: " + Network.connections.Length);
}
}
if (GUILayout.Button("Disconnect"))
{
Network.Disconnect(200);
}
}
}
}
Простой скрипт на создание сервера или подключение к нему(M2H туториал).
Далее в Visual Studio создал Win forms applications. В References добавил библиотеки UnityEngine.
вот код события нажатия кнопки
Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UnityEngine;
using UnityEditor;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public string connectToIP = "127.0.0.1";
public int connectPort = 45678;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
UnityEngine.Network.InitializeServer(32, connectPort, false);
}
catch(Exception ex)
{
msg("Не удается запустить сервер по причине - " + ex);
}
}
void msg(string message)
{
listBox1.Items.Add(message);
}
}
}
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UnityEngine;
using UnityEditor;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public string connectToIP = "127.0.0.1";
public int connectPort = 45678;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
UnityEngine.Network.InitializeServer(32, connectPort, false);
}
catch(Exception ex)
{
msg("Не удается запустить сервер по причине - " + ex);
}
}
void msg(string message)
{
listBox1.Items.Add(message);
}
}
}
По нажатию кнопки выскакиевт эксепшен
An unhandled exception of type 'System.Security.SecurityException' occurred in System.Windows.Forms.dll
Additional information: Методы ECall должны быть упакованы в системном модуле.
Поиск по google этой ошибки ничем не помог.
Если кто сталкивался или знает как это исправить подскажите пожалуйста.
Заранее благодарен.