1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-13 21:56:29 +09:00
Files
lidgren-network-gen3/Samples/File stream sample/FileStreamServer/Program.cs
2013-05-08 13:26:17 +00:00

90 lines
2.3 KiB
C#

using System;
using System.Windows.Forms;
using Lidgren.Network;
using SamplesCommon;
namespace FileStreamServer
{
static class Program
{
private static Form1 s_form;
private static NetServer s_server;
private static string s_fileName;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
s_form = new Form1();
NetPeerConfiguration config = new NetPeerConfiguration("filestream");
config.Port = 14242;
s_server = new NetServer(config);
Application.Idle += new EventHandler(AppLoop);
Application.Run(s_form);
s_server.Shutdown("Application exiting");
}
public static void Output(string str)
{
if (s_form != null && s_form.richTextBox1 != null)
NativeMethods.AppendText(s_form.richTextBox1, str);
}
static void AppLoop(object sender, EventArgs e)
{
while (NativeMethods.AppStillIdle)
{
NetIncomingMessage inc;
while((inc = s_server.ReadMessage()) != null)
{
switch (inc.MessageType)
{
case NetIncomingMessageType.DebugMessage:
case NetIncomingMessageType.WarningMessage:
case NetIncomingMessageType.ErrorMessage:
case NetIncomingMessageType.VerboseDebugMessage:
Output(inc.ReadString());
break;
case NetIncomingMessageType.StatusChanged:
NetConnectionStatus status = (NetConnectionStatus)inc.ReadByte();
switch (status)
{
case NetConnectionStatus.Connected:
// start streaming to this client
inc.SenderConnection.Tag = new StreamingClient(inc.SenderConnection, s_fileName);
Output("Starting streaming to " + inc.SenderConnection);
break;
default:
Output(inc.SenderConnection + ": " + status + " (" + inc.ReadString() + ")");
break;
}
break;
}
s_server.Recycle(inc);
}
// stream to all connections
foreach (NetConnection conn in s_server.Connections)
{
StreamingClient client = conn.Tag as StreamingClient;
if (client != null)
client.Heartbeat();
}
System.Threading.Thread.Sleep(0);
}
}
internal static void Start(string filename)
{
s_fileName = filename;
s_server.Start();
}
}
}