Extension method for reading/writing enums in netbuffers, (untested) classes for sending files

This commit is contained in:
Regalis11
2016-02-24 15:45:45 +02:00
parent c613e5fcf8
commit 6f51c6fb33
10 changed files with 270 additions and 128 deletions
Binary file not shown.
+3
View File
@@ -131,6 +131,9 @@
<Compile Include="Source\Map\SubmarineBody.cs" />
<Compile Include="Source\Map\TransitionCinematic.cs" />
<Compile Include="Source\Networking\BanList.cs" />
<Compile Include="Source\Networking\FileStreamReceiver.cs" />
<Compile Include="Source\Networking\FileStreamSender.cs" />
<Compile Include="Source\Networking\NetBufferExtensions.cs" />
<Compile Include="Source\Networking\NetConfig.cs" />
<Compile Include="Source\Networking\NetStats.cs" />
<Compile Include="Source\Networking\ReliableSender.cs" />
@@ -0,0 +1,70 @@
using Lidgren.Network;
using System;
using System.IO;
namespace Barotrauma.Networking
{
class FileStreamReceiver
{
private NetClient s_client;
private ulong s_length;
private ulong s_received;
private FileStream s_writeStream;
private int s_timeStarted;
public FileTransferStatus Status
{
get;
private set;
}
public float BytesPerSecond
{
get;
private set;
}
public FileStreamReceiver(NetClient client)
{
s_client = client;
Status = FileTransferStatus.NotStarted;
}
public void ReadMessage(NetIncomingMessage inc)
{
int chunkLen = inc.LengthBytes;
if (s_length == 0)
{
s_length = inc.ReadUInt64();
string filename = inc.ReadString();
s_writeStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);
s_timeStarted = Environment.TickCount;
Status = FileTransferStatus.NotStarted;
return;
}
byte[] all = inc.ReadBytes(inc.LengthBytes);
s_received += (ulong)all.Length;
s_writeStream.Write(all, 0, all.Length);
int passed = Environment.TickCount - s_timeStarted;
float psec = passed / 1000.0f;
BytesPerSecond = s_received / psec;
Status = FileTransferStatus.Receiving;
if (s_received >= s_length)
{
s_writeStream.Flush();
s_writeStream.Close();
s_writeStream.Dispose();
Status = FileTransferStatus.Finished;
}
}
}
}
@@ -0,0 +1,99 @@
using Lidgren.Network;
using System.IO;
namespace Barotrauma.Networking
{
enum FileTransferStatus
{
NotStarted, Sending, Receiving, Finished, Error
}
class FileStreamSender
{
private FileStream inputStream;
private int sentOffset;
private int chunkLen;
private byte[] tempBuffer;
private NetConnection connection;
public FileTransferStatus Status
{
get;
private set;
}
public string FileName
{
get;
private set;
}
public static FileStreamSender Create(NetConnection conn, string fileName)
{
if (!File.Exists(fileName))
{
DebugConsole.ThrowError("Sending a file failed. File ''"+fileName+"'' not found.");
return null;
}
return new FileStreamSender(conn, fileName);
}
private FileStreamSender(NetConnection conn, string fileName)
{
connection = conn;
inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
chunkLen = connection.Peer.Configuration.MaximumTransmissionUnit - 20;
tempBuffer = new byte[chunkLen];
sentOffset = 0;
FileName = fileName;
Status = FileTransferStatus.NotStarted;
}
public void Update()
{
if (inputStream == null) return;
if (!connection.CanSendImmediately(NetDeliveryMethod.ReliableOrdered, 1)) return;
// send another part of the file!
long remaining = inputStream.Length - sentOffset;
int sendBytes = (remaining > chunkLen ? chunkLen : (int)remaining);
// just assume we can read the whole thing in one Read()
inputStream.Read(tempBuffer, 0, sendBytes);
NetOutgoingMessage message;
if (sentOffset == 0)
{
// first message; send length, chunk length and file name
message = connection.Peer.CreateMessage(sendBytes + 8);
message.Write((ulong)inputStream.Length);
message.Write(Path.GetFileName(inputStream.Name));
connection.SendMessage(message, NetDeliveryMethod.ReliableOrdered, 1);
Status = FileTransferStatus.Sending;
}
message = connection.Peer.CreateMessage(sendBytes + 8);
message.Write(tempBuffer, 0, sendBytes);
connection.SendMessage(message, NetDeliveryMethod.ReliableOrdered, 1);
sentOffset += sendBytes;
//Program.Output("Sent " + m_sentOffset + "/" + m_inputStream.Length + " bytes to " + m_connection);
if (remaining - sendBytes <= 0)
{
inputStream.Close();
inputStream.Dispose();
inputStream = null;
Status = FileTransferStatus.Finished;
}
}
}
}
+29 -27
View File
@@ -19,13 +19,13 @@ namespace Barotrauma.Networking
private bool connected;
private int myID;
private byte myID;
private List<Client> otherClients;
private string serverIP;
public int ID
public byte ID
{
get { return myID; }
}
@@ -99,7 +99,7 @@ namespace Barotrauma.Networking
NetOutgoingMessage outmsg = client.CreateMessage();
client.Start();
outmsg.Write((byte)PacketTypes.Login);
outmsg.WriteEnum(PacketTypes.Login);
outmsg.Write(myID);
outmsg.Write(password);
outmsg.Write(GameMain.Version.ToString());
@@ -221,10 +221,10 @@ namespace Barotrauma.Networking
{
// All manually sent messages are type of "Data"
case NetIncomingMessageType.Data:
byte packetType = inc.ReadByte();
byte packetType = (byte)inc.ReadEnum<PacketTypes>();
if (packetType == (byte)PacketTypes.LoggedIn)
{
myID = inc.ReadInt32();
myID = inc.ReadByte();
gameStarted = inc.ReadBoolean();
bool hasCharacter = inc.ReadBoolean();
bool allowSpectating = inc.ReadBoolean();
@@ -250,7 +250,7 @@ namespace Barotrauma.Networking
int existingClients = inc.ReadInt32();
for (int i = 1; i <= existingClients; i++)
{
Client otherClient = new Client(inc.ReadString(), inc.ReadInt32());
Client otherClient = new Client(inc.ReadString(), inc.ReadByte());
GameMain.NetLobbyScreen.AddPlayer(otherClient.name);
otherClients.Add(otherClient);
@@ -262,7 +262,7 @@ namespace Barotrauma.Networking
CanStart = true;
NetOutgoingMessage lobbyUpdateRequest = client.CreateMessage();
lobbyUpdateRequest.Write((byte)PacketTypes.RequestNetLobbyUpdate);
lobbyUpdateRequest.WriteEnum(PacketTypes.RequestNetLobbyUpdate);
client.SendMessage(lobbyUpdateRequest, NetDeliveryMethod.ReliableUnordered);
}
else if (packetType == (byte)PacketTypes.KickedOut)
@@ -399,7 +399,7 @@ namespace Barotrauma.Networking
message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.Unreliable);
if (message != null) client.SendMessage(message, NetDeliveryMethod.Unreliable);
message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLindgren);
message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLidgren);
if (message != null) client.SendMessage(message, NetDeliveryMethod.ReliableUnordered);
//foreach (NetworkEvent networkEvent in NetworkEvent.Events)
@@ -445,12 +445,12 @@ namespace Barotrauma.Networking
{
if (inc.MessageType != NetIncomingMessageType.Data) continue;
byte packetType = inc.ReadByte();
byte packetType = (byte)inc.ReadEnum<PacketTypes>();
if (packetType == (byte)PacketTypes.ReliableMessage)
{
if (!reliableChannel.CheckMessage(inc)) continue;
packetType = inc.ReadByte();
packetType = (byte)inc.ReadEnum<PacketTypes>();
}
switch (packetType)
@@ -467,7 +467,7 @@ namespace Barotrauma.Networking
break;
case (byte)PacketTypes.PlayerJoined:
Client otherClient = new Client(inc.ReadString(), inc.ReadInt32());
Client otherClient = new Client(inc.ReadString(), inc.ReadByte());
GameMain.NetLobbyScreen.AddPlayer(otherClient.name);
otherClients.Add(otherClient);
@@ -476,7 +476,7 @@ namespace Barotrauma.Networking
break;
case (byte)PacketTypes.PlayerLeft:
int leavingID = inc.ReadInt32();
byte leavingID = inc.ReadByte();
AddChatMessage(inc.ReadString(), ChatMessageType.Server);
Client disconnectedClient = otherClients.Find(c => c.ID == leavingID);
@@ -510,7 +510,8 @@ namespace Barotrauma.Networking
break;
case (byte)PacketTypes.Chatmessage:
ChatMessageType messageType = (ChatMessageType)inc.ReadByte();
ChatMessageType messageType = inc.ReadEnum<ChatMessageType>();
AddChatMessage(inc.ReadString(), messageType);
break;
case (byte)PacketTypes.NetworkEvent:
@@ -595,7 +596,7 @@ namespace Barotrauma.Networking
int count = inc.ReadByte();
for (int n = 0; n < count; n++)
{
int id = inc.ReadInt32();
byte id = inc.ReadByte();
Character newCharacter = ReadCharacterData(inc, id == myID);
crew.Add(newCharacter);
@@ -696,7 +697,7 @@ namespace Barotrauma.Networking
public override void Disconnect()
{
NetOutgoingMessage msg = client.CreateMessage();
msg.Write((byte)PacketTypes.PlayerLeft);
msg.WriteEnum(PacketTypes.PlayerLeft);
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
client.Shutdown("");
@@ -706,8 +707,8 @@ namespace Barotrauma.Networking
public void Vote(VoteType voteType, object userData)
{
NetOutgoingMessage msg = client.CreateMessage();
msg.Write((byte)PacketTypes.Vote);
msg.Write((byte)voteType);
msg.WriteEnum(PacketTypes.Vote);
msg.WriteEnum(voteType);
switch (voteType)
{
@@ -728,8 +729,8 @@ namespace Barotrauma.Networking
public bool SpectateClicked(GUIButton button, object userData)
{
NetOutgoingMessage msg = client.CreateMessage();
msg.Write((byte)PacketTypes.SpectateRequest);
msg.WriteEnum(PacketTypes.SpectateRequest);
client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered);
if (button != null) button.Enabled = false;
@@ -759,7 +760,8 @@ namespace Barotrauma.Networking
if (characterInfo == null) return;
NetOutgoingMessage msg = client.CreateMessage();
msg.Write((byte)PacketTypes.CharacterInfo);
msg.WriteEnum(PacketTypes.CharacterInfo);
msg.Write(characterInfo.Name);
msg.Write(characterInfo.Gender == Gender.Male);
msg.Write((byte)characterInfo.HeadSpriteId);
@@ -835,8 +837,8 @@ namespace Barotrauma.Networking
(myCharacter == null || myCharacter.IsDead)) ? ChatMessageType.Dead : ChatMessageType.Default;
ReliableMessage msg = reliableChannel.CreateMessage();
msg.InnerMessage.Write((byte)PacketTypes.Chatmessage);
msg.InnerMessage.Write((byte)type);
msg.InnerMessage.WriteEnum(PacketTypes.Chatmessage);
msg.InnerMessage.WriteEnum(type);
msg.InnerMessage.Write(message);
reliableChannel.SendMessage(msg, client.ServerConnection);
@@ -852,18 +854,18 @@ namespace Barotrauma.Networking
switch (Rand.Int(5))
{
case 0:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)NetworkEventType.EntityUpdate);
msg.WriteEnum(PacketTypes.NetworkEvent);
msg.WriteEnum(NetworkEventType.EntityUpdate);
msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
break;
case 1:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.WriteEnum(PacketTypes.NetworkEvent);
msg.Write((byte)Enum.GetNames(typeof(NetworkEventType)).Length);
msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
break;
case 2:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)NetworkEventType.ComponentUpdate);
msg.WriteEnum(PacketTypes.NetworkEvent);
msg.WriteEnum(NetworkEventType.ComponentUpdate);
msg.Write((int)Item.ItemList[Rand.Int(Item.ItemList.Count)].ID);
msg.Write(Rand.Int(8));
break;
+33 -87
View File
@@ -420,7 +420,7 @@ namespace Barotrauma.Networking
// Notify the client that they have logged in
var outmsg = server.CreateMessage();
outmsg.Write((byte)PacketTypes.LoggedIn);
outmsg.WriteEnum(PacketTypes.LoggedIn);
outmsg.Write(sender.ID);
outmsg.Write(gameStarted);
outmsg.Write(gameStarted && sender.Character!=null);
@@ -445,8 +445,7 @@ namespace Barotrauma.Networking
//notify other clients about the new client
outmsg = server.CreateMessage();
outmsg.Write((byte)PacketTypes.PlayerJoined);
outmsg.WriteEnum(PacketTypes.PlayerJoined);
outmsg.Write(sender.name);
outmsg.Write(sender.ID);
@@ -475,20 +474,12 @@ namespace Barotrauma.Networking
Client dataSender = ConnectedClients.Find(c => c.Connection == inc.SenderConnection);
if (dataSender == null) return;
byte packetType = 0;
try
{
packetType = inc.ReadByte();
}
catch
{
return;
}
byte packetType = (byte)inc.ReadEnum<PacketTypes>();
if (packetType == (byte)PacketTypes.ReliableMessage)
{
if (!dataSender.ReliableChannel.CheckMessage(inc)) return;
packetType = inc.ReadByte();
packetType = (byte)inc.ReadEnum<PacketTypes>();
}
switch (packetType)
@@ -499,10 +490,9 @@ namespace Barotrauma.Networking
break;
case (byte)PacketTypes.Chatmessage:
ChatMessageType messageType = (ChatMessageType)inc.ReadByte();
string message = inc.ReadString();
SendChatMessage(message, messageType);
ChatMessageType messageType = inc.ReadEnum<ChatMessageType>();
SendChatMessage(inc.ReadString(), messageType);
break;
case (byte)PacketTypes.PlayerLeft:
@@ -551,7 +541,7 @@ namespace Barotrauma.Networking
private void HandleConnectionApproval(NetIncomingMessage inc)
{
if (inc.ReadByte() != (byte)PacketTypes.Login) return;
if (inc.ReadEnum<PacketTypes>() != PacketTypes.Login) return;
DebugConsole.NewMessage("New player has joined the server", Color.White);
@@ -568,11 +558,11 @@ namespace Barotrauma.Networking
return;
}
int userID;
byte userID;
string userPassword = "", version = "", packageName = "", packageHash = "", name = "";
try
{
userID = inc.ReadInt32();
userID = inc.ReadByte();
userPassword = inc.ReadString();
version = inc.ReadString();
packageName = inc.ReadString();
@@ -644,7 +634,7 @@ namespace Barotrauma.Networking
}
}
userID = Rand.Range(1, 1000000);
userID = (byte)Rand.Range(1, 255);
while (ConnectedClients.Find(c => c.ID == userID) != null)
{
userID++;
@@ -700,7 +690,7 @@ namespace Barotrauma.Networking
c.ReliableChannel.SendMessage(reliableMessage, c.Connection);
}
message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLindgren, c.Connection);
message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLidgren, c.Connection);
if (message!=null)
{
server.SendMessage(message, c.Connection, NetDeliveryMethod.ReliableUnordered);
@@ -896,7 +886,7 @@ namespace Barotrauma.Networking
private NetOutgoingMessage CreateStartMessage(int seed, Submarine selectedSub, GameModePreset selectedMode)
{
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)PacketTypes.StartGame);
msg.WriteEnum(PacketTypes.StartGame);
msg.Write(seed);
@@ -920,7 +910,7 @@ namespace Barotrauma.Networking
if (myCharacter != null)
{
msg.Write(-1);
msg.Write(0);
WriteCharacterData(msg, myCharacter.Info.Name, myCharacter);
}
@@ -949,8 +939,6 @@ namespace Barotrauma.Networking
public IEnumerable<object> EndGame(string endMessage)
{
//var messageBox = new GUIMessageBox("The round has ended", endMessage, 400, 300);
Character.Controlled = null;
myCharacter = null;
GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
@@ -961,7 +949,7 @@ namespace Barotrauma.Networking
if (ConnectedClients.Count > 0)
{
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)PacketTypes.EndGame);
msg.WriteEnum(PacketTypes.EndGame);
msg.Write(endMessage);
if (server.ConnectionsCount > 0)
@@ -987,23 +975,11 @@ namespace Barotrauma.Networking
{
secondsLeft -= CoroutineManager.DeltaTime;
//float camAngle = (float)((DateTime.Now - endTime).TotalSeconds / endPreviewLength) * MathHelper.TwoPi;
//Vector2 offset = (new Vector2(
// (float)Math.Cos(camAngle) * (Submarine.Borders.Width / 2.0f),
// (float)Math.Sin(camAngle) * (Submarine.Borders.Height / 2.0f)));
//GameMain.GameScreen.Cam.TargetPos = Submarine.Loaded.Position + offset * 0.8f;
//Game1.GameScreen.Cam.MoveCamera((float)deltaTime);
//messageBox.Text = endMessage + "\nReturning to lobby in " + (int)secondsLeft + " s";
yield return CoroutineStatus.Running;
} while (secondsLeft > 0.0f);
Submarine.Unload();
//messageBox.Close(null, null);
GameMain.NetLobbyScreen.Select();
yield return CoroutineStatus.Success;
@@ -1031,14 +1007,14 @@ namespace Barotrauma.Networking
Log(msg, messageColor[(int)ChatMessageType.Server]);
NetOutgoingMessage outmsg = server.CreateMessage();
outmsg.Write((byte)PacketTypes.KickedOut);
outmsg.WriteEnum(PacketTypes.KickedOut);
outmsg.Write(targetmsg);
server.SendMessage(outmsg, client.Connection, NetDeliveryMethod.ReliableUnordered, 0);
ConnectedClients.Remove(client);
outmsg = server.CreateMessage();
outmsg.Write((byte)PacketTypes.PlayerLeft);
outmsg.WriteEnum(PacketTypes.PlayerLeft);
outmsg.Write(client.ID);
outmsg.Write(msg);
@@ -1110,7 +1086,7 @@ namespace Barotrauma.Networking
}
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)PacketTypes.Traitor);
msg.WriteEnum(PacketTypes.Traitor);
msg.Write(target.Info.Name);
if (server.Connections.Count > 0)
{
@@ -1199,7 +1175,7 @@ namespace Barotrauma.Networking
try
{
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)PacketTypes.VoteStatus);
msg.WriteEnum(PacketTypes.VoteStatus);
Voting.WriteData(msg, ConnectedClients);
server.SendMessage(msg, server.Connections, NetDeliveryMethod.ReliableUnordered, 0);
@@ -1223,7 +1199,7 @@ namespace Barotrauma.Networking
if (server.Connections.Count == 0) return true;
NetOutgoingMessage msg = server.CreateMessage();
msg.Write((byte)PacketTypes.UpdateNetLobby);
msg.WriteEnum(PacketTypes.UpdateNetLobby);
GameMain.NetLobbyScreen.WriteData(msg);
server.SendMessage(msg, server.Connections, NetDeliveryMethod.ReliableUnordered, 0);
@@ -1255,8 +1231,6 @@ namespace Barotrauma.Networking
public override void SendChatMessage(string message, ChatMessageType type = ChatMessageType.Server)
{
List<Client> recipients = new List<Client>();
Client targetClient = null;
@@ -1282,34 +1256,6 @@ namespace Barotrauma.Networking
}
}
//remove the ''name: '' part
//string[] words = message.Split(':');
//string[] newMessage = ((string[])words.Skip(1));
//if (words.Length > 2 && words[1].FirstOrDefault()=='/' && type==ChatMessageType.Server)
//{
// if (words[1] == "/dead" || words[1] == "/d")
// {
// type = ChatMessageType.Dead;
// }
// else
// {
// targetClient = ConnectedClients.Find(c =>
// words[1] == "/" + c.name.ToLower() ||
// c.Character != null && words[1] == "/" + c.Character.Name.ToLower());
// if (targetClient==null)
// {
// AddChatMessage("Player ''"+words[1].Replace("/", "")+"'' not found!", ChatMessageType.Admin);
// return;
// }
// }
// message = words[0] + " " + string.Join(" ", words, 2, words.Length - 2);
//}
if (targetClient != null)
{
recipients.Add(targetClient);
@@ -1329,8 +1275,8 @@ namespace Barotrauma.Networking
foreach (Client c in recipients)
{
ReliableMessage msg = c.ReliableChannel.CreateMessage();
msg.InnerMessage.Write((byte)PacketTypes.Chatmessage);
msg.InnerMessage.Write((byte)type);
msg.InnerMessage.WriteEnum(PacketTypes.Chatmessage);
msg.InnerMessage.WriteEnum(type);
msg.InnerMessage.Write(message);
c.ReliableChannel.SendMessage(msg, c.Connection);
@@ -1346,8 +1292,8 @@ namespace Barotrauma.Networking
try
{
name = message.ReadString();
gender = message.ReadBoolean() ? Gender.Male : Gender.Female;
name = message.ReadString();
gender = message.ReadBoolean() ? Gender.Male : Gender.Female;
headSpriteId = message.ReadByte();
}
catch
@@ -1397,7 +1343,7 @@ namespace Barotrauma.Networking
if (items == null || !items.Any()) return;
NetOutgoingMessage message = server.CreateMessage();
message.Write((byte)PacketTypes.NewItem);
message.WriteEnum(PacketTypes.NewItem);
Item.Spawner.FillNetworkData(message, items, inventories);
@@ -1520,13 +1466,13 @@ namespace Barotrauma.Networking
switch (Rand.Int(5))
{
case 0:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)Enum.GetNames(typeof(NetworkEventType)).Length);
msg.WriteEnum(PacketTypes.NetworkEvent);
msg.Write(Rand.Int(Enum.GetNames(typeof(NetworkEventType)).Length));
msg.Write(Rand.Int(MapEntity.mapEntityList.Count));
break;
case 1:
msg.Write((byte)PacketTypes.NetworkEvent);
msg.Write((byte)NetworkEventType.ComponentUpdate);
msg.WriteEnum(PacketTypes.NetworkEvent);
msg.WriteEnum(NetworkEventType.ComponentUpdate);
msg.Write((int)Item.ItemList[Rand.Int(Item.ItemList.Count)].ID);
msg.Write(Rand.Int(8));
break;
@@ -1564,7 +1510,7 @@ namespace Barotrauma.Networking
class Client
{
public string name;
public int ID;
public byte ID;
public Character Character;
public CharacterInfo characterInfo;
@@ -1583,13 +1529,13 @@ namespace Barotrauma.Networking
public float deleteDisconnectedTimer;
public Client(NetPeer server, string name, int ID)
public Client(NetPeer server, string name, byte ID)
: this(name, ID)
{
ReliableChannel = new ReliableChannel(server);
}
public Client(string name, int ID)
public Client(string name, byte ID)
{
this.name = name;
this.ID = ID;
@@ -0,0 +1,18 @@
using Lidgren.Network;
using System;
namespace Barotrauma.Networking
{
static class NetBufferExtensions
{
public static void WriteEnum(this NetBuffer buffer, Enum value)
{
buffer.WriteRangedInteger(0, Enum.GetValues(value.GetType()).Length - 1, Convert.ToInt32(value));
}
public static TEnum ReadEnum<TEnum>(this NetBuffer buffer)
{
return (TEnum)(object)buffer.ReadRangedInteger(0, Enum.GetValues(typeof(TEnum)).Length - 1);
}
}
}
+5 -5
View File
@@ -8,7 +8,7 @@ namespace Barotrauma.Networking
{
Unreliable = 0,
ReliableChannel = 1,
ReliableLindgren = 2
ReliableLidgren = 2
}
enum NetworkEventType
@@ -43,14 +43,14 @@ namespace Barotrauma.Networking
deliveryMethod = new NetworkEventDeliveryMethod[Enum.GetNames(typeof(NetworkEventType)).Length];
deliveryMethod[(int)NetworkEventType.ImportantEntityUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.KillCharacter] = NetworkEventDeliveryMethod.ReliableLindgren;
deliveryMethod[(int)NetworkEventType.KillCharacter] = NetworkEventDeliveryMethod.ReliableLidgren;
deliveryMethod[(int)NetworkEventType.SelectCharacter] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.PickItem] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.DropItem] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.InventoryUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.ItemFixed] = NetworkEventDeliveryMethod.ReliableLindgren;
deliveryMethod[(int)NetworkEventType.ItemFixed] = NetworkEventDeliveryMethod.ReliableLidgren;
deliveryMethod[(int)NetworkEventType.UpdateProperty] = NetworkEventDeliveryMethod.ReliableChannel;
deliveryMethod[(int)NetworkEventType.WallDamage] = NetworkEventDeliveryMethod.ReliableChannel;
@@ -132,7 +132,7 @@ namespace Barotrauma.Networking
public bool FillData(NetBuffer message)
{
message.WriteRangedInteger(0, Enum.GetValues(typeof(NetworkEventType)).Length-1, (int)eventType);
message.WriteEnum(eventType);
Entity e = Entity.FindEntityByID(id);
if (e == null) return false;
@@ -189,7 +189,7 @@ namespace Barotrauma.Networking
try
{
eventType = (NetworkEventType)message.ReadRangedInteger(0, Enum.GetValues(typeof(NetworkEventType)).Length-1);
eventType = message.ReadEnum<NetworkEventType>();
id = message.ReadUInt16();
}
catch (Exception exception)
@@ -7,7 +7,7 @@ using Lidgren.Network;
namespace Barotrauma.Networking
{
enum PacketTypes
enum PacketTypes : int
{
Unknown,
@@ -36,6 +36,11 @@ namespace Barotrauma.Networking
SpectateRequest
}
enum ChatMessageType
{
Default, Admin, Dead, Server
}
enum VoteType
{
Unknown,
@@ -158,7 +163,7 @@ namespace Barotrauma.Networking
if (msgBytes.Count == 0) return null;
NetOutgoingMessage message = netPeer.CreateMessage();
message.Write((byte)PacketTypes.NetworkEvent);
message.WriteEnum(PacketTypes.NetworkEvent);
message.Write((float)NetTime.Now);
@@ -311,8 +316,4 @@ namespace Barotrauma.Networking
}
enum ChatMessageType
{
Default, Admin, Dead, Server
}
}
@@ -94,7 +94,8 @@ namespace Barotrauma.Networking.ReliableMessages
var reliableMessage = new ReliableMessage(message, messageID);
message.Write((byte)PacketTypes.ReliableMessage);
message.WriteEnum(PacketTypes.ReliableMessage);
message.Write(messageID);
if (messageBuffer.Count > NetConfig.ReliableMessageBufferSize)
@@ -183,7 +184,8 @@ namespace Barotrauma.Networking.ReliableMessages
//Debug.WriteLine("Sending ack message: "+messageCount);
NetOutgoingMessage message = sender.CreateMessage();
message.Write((byte)PacketTypes.LatestMessageID);
message.WriteEnum(PacketTypes.LatestMessageID);
message.Write(messageCount);
sender.SendMessage(message, recipient, NetDeliveryMethod.Unreliable);
@@ -242,7 +244,8 @@ namespace Barotrauma.Networking.ReliableMessages
Debug.WriteLine("rerequest "+missingMessage.ID+" (try #"+missingMessage.ResendRequestsSent+")");
NetOutgoingMessage resendRequest = receiver.CreateMessage();
resendRequest.Write((byte)PacketTypes.ResendRequest);
resendRequest.WriteEnum(PacketTypes.ResendRequest);
resendRequest.Write(missingMessage.ID);
receiver.SendMessage(resendRequest, recipient,