- Timestamp:
- 2016-04-15 19:02:35 (7 years ago)
- Location:
- 2015/koodauskerho/sieerinn/TasohyppelyNettipeli
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
2015/koodauskerho/sieerinn/TasohyppelyNettipeli
- Property svn:ignore
-
old new 1 1 *.suo 2 *.user
-
- Property svn:ignore
-
2015/koodauskerho/sieerinn/TasohyppelyNettipeli/GameServer/GameServer.cs
r7141 r7143 81 81 public class Client 82 82 { 83 private const int BLOCK_SIZE = 2048; 84 83 85 private NetworkStream stream; 84 86 … … 95 97 } 96 98 99 private void ParsePacket(string packet) 100 { 101 var parts = packet.Split('\x01'); 102 103 var messageType = int.Parse(parts[0]); 104 var senderGuid = new Guid(Convert.FromBase64String(parts[1])); 105 var game = parts[2]; 106 107 if (messageType == 0) 108 { 109 Console.WriteLine("Game: " + game); 110 GameName = game; 111 } 112 113 GameServer.Broadcast(this, game, Encoding.ASCII.GetBytes(packet + "\x00")); 114 } 115 97 116 private void ReceiveThread() 98 117 { 99 var buffer = new byte[2048]; 118 var buffer = new StringBuilder(); 119 100 120 while (ClientSocket.Connected) 101 121 { … … 104 124 if (ClientSocket.Available <= 0) continue; 105 125 106 var bytesRead = stream.Read(buffer, 0, 2048); 107 var bytes = new byte[bytesRead]; 108 Buffer.BlockCopy(buffer, 0, bytes, 0, bytesRead); 126 var receivedBytes = new byte[BLOCK_SIZE]; 127 var bytesRead = stream.Read(receivedBytes, 0, BLOCK_SIZE); 109 128 110 var mstream = new MemoryStream(buffer); 111 var reader = new BinaryReader(mstream); 112 113 var messageType = reader.ReadByte(); 114 reader.ReadBytes(16); // read guid 115 var gameName = reader.ReadString(); 116 if (messageType == 0) 129 for (int i = 0; i < bytesRead; i++) 117 130 { 118 Console.WriteLine("Game: " + gameName); 119 GameName = gameName; 131 if (receivedBytes[i] == '\x00') 132 { 133 ParsePacket(buffer.ToString()); 134 buffer.Clear(); 135 } 136 else 137 { 138 buffer.Append((char)receivedBytes[i]); 139 } 120 140 } 121 GameServer.Broadcast(this, gameName, bytes);122 141 } 123 142 catch (Exception) -
2015/koodauskerho/sieerinn/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli/NetworkConnection.cs
r7142 r7143 2 2 using System.IO; 3 3 using System.Linq; 4 using System.Net; 4 5 using System.Net.Sockets; 5 6 using System.Reflection; … … 7 8 using System.Threading; 8 9 using System.Runtime.Serialization.Formatters.Binary; 10 using System.Text; 9 11 10 12 … … 24 26 private readonly TcpClient client; 25 27 private readonly CancellationTokenSource cancelSource; 26 private NetworkStream stream; 28 private readonly string gameName; 29 private NetworkStream networkStream; 27 30 private Thread receiveThread; 28 private string gameName;29 31 30 32 public delegate void MessageReceived(Guid id, string message); … … 55 57 { 56 58 client.Connect(ip, port); // TODO: try 57 stream = client.GetStream();59 networkStream = client.GetStream(); 58 60 receiveThread = new Thread(() => ReceiveThread(cancelSource.Token)); 59 61 receiveThread.Start(); … … 68 70 cancelSource.Cancel(); 69 71 receiveThread.Join(); 70 stream.Close();72 networkStream.Close(); 71 73 client.Client.Close(); 72 74 client.Close(); … … 74 76 } 75 77 76 private void Send(MessageType type, string message ="")78 private void Send(MessageType type, string message = "") 77 79 { 78 var mstream = new MemoryStream();79 var writer = new BinaryWriter(mstream);80 //var mstream = new MemoryStream(); 81 //var writer = new BinaryWriter(mstream); 80 82 81 writer.Write((byte)type); 82 writer.Write(guidBytes, 0, guidBytes.Length); 83 writer.Write(gameName); 83 //writer.Write((byte)type); 84 //writer.Write(guidBytes, 0, guidBytes.Length); 85 //writer.Write(gameName); 86 //if (message.Length > 0) 87 // writer.Write(message); 88 89 //var sendBytes = mstream.ToArray(); 90 //var lengthBytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(sendBytes.Length)); 91 92 //networkStream.Write(lengthBytes, 0, lengthBytes.Length); 93 //networkStream.Write(sendBytes, 0, sendBytes.Length); 94 //networkStream.Flush(); 95 96 var builder = new StringBuilder(); 97 98 builder.Append((int)type); 99 builder.Append('\x01'); 100 101 builder.Append(Convert.ToBase64String(guidBytes)); 102 builder.Append('\x01'); 103 104 builder.Append(gameName); 105 builder.Append('\x01'); 106 84 107 if (message.Length > 0) 85 writer.Write(message); 108 { 109 builder.Append(message); 110 builder.Append('\x01'); 111 } 86 112 87 var sendBytes = mstream.ToArray(); 88 stream.Write(sendBytes, 0, sendBytes.Length); 89 stream.Flush(); 113 builder.Append('\x00'); 114 115 var bytes = Encoding.ASCII.GetBytes(builder.ToString()); 116 networkStream.Write(bytes, 0, bytes.Length); 117 networkStream.Flush(); 90 118 } 91 119 … … 119 147 } 120 148 149 private void ParsePacket(string packet) 150 { 151 var parts = packet.Split('\x01'); 152 153 var messageType = (MessageType)int.Parse(parts[0]); 154 var senderGuid = new Guid(Convert.FromBase64String(parts[1])); 155 var game = parts[2]; 156 157 if (messageType == MessageType.Message && OnMessageReceive != null) 158 { 159 var message = parts[3]; 160 OnMessageReceive(senderGuid, message); 161 } 162 else if (messageType == MessageType.Connected && OnConnect != null) 163 { 164 OnConnect(senderGuid); 165 } 166 else if (messageType == MessageType.Disconnected && OnDisconnect != null) 167 { 168 OnDisconnect(senderGuid); 169 } 170 } 171 121 172 private void ReceiveThread(CancellationToken cancelToken) 122 173 { 174 var buffer = new StringBuilder(); 175 123 176 while (!cancelToken.IsCancellationRequested) 124 177 { 125 if (client.Available == 0) continue; 178 if (client.Available == 0) 179 continue; 126 180 127 181 var receivedBytes = new byte[BLOCK_SIZE]; 128 stream.Read(receivedBytes, 0, BLOCK_SIZE); 129 var mstream = new MemoryStream(receivedBytes); 130 var reader = new BinaryReader(mstream); 131 132 var messageType = (MessageType)reader.ReadByte(); 133 var senderGuid = new Guid(reader.ReadBytes(guidBytes.Length)); 134 var game = reader.ReadString(); 182 var bytesRead = networkStream.Read(receivedBytes, 0, BLOCK_SIZE); 135 183 136 if (messageType == MessageType.Message && OnMessageReceive != null)184 for (int i = 0; i < bytesRead; i++) 137 185 { 138 var message = reader.ReadString(); 139 OnMessageReceive(senderGuid, message); 140 } 141 else if (messageType == MessageType.Connected && OnConnect != null) 142 { 143 OnConnect(senderGuid); 144 } 145 else if (messageType == MessageType.Disconnected && OnDisconnect != null) 146 { 147 OnDisconnect(senderGuid); 186 if (receivedBytes[i] == '\x00') 187 { 188 ParsePacket(buffer.ToString()); 189 buffer.Clear(); 190 } 191 else 192 { 193 buffer.Append((char)receivedBytes[i]); 194 } 148 195 } 149 196 } -
2015/koodauskerho/sieerinn/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli.cs
r7141 r7143 41 41 yhteys.OnConnect += UusiPelaaja; 42 42 yhteys.OnDisconnect += PoistaPelaaja; 43 yhteys.Connect("192.168.0.100", 8888);43 yhteys.Connect("192.168.0.100", 3074); 44 44 Exiting += yhteys.Close; 45 45 … … 69 69 void UusiViesti(Guid id, string viesti) 70 70 { 71 if (!muutPelaajat.ContainsKey(id)) 72 { 73 muutPelaajat.Add(id, LuoPelaaja()); 74 } 71 75 Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti); 72 76 muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
Note: See TracChangeset
for help on using the changeset viewer.