Changeset 7143 for 2015


Ignore:
Timestamp:
2016-04-15 19:02:35 (3 years ago)
Author:
sieerinn
Message:

Vaihto binääristä tekstimuotoiseen protokollaan.

Location:
2015/koodauskerho/sieerinn/TasohyppelyNettipeli
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • 2015/koodauskerho/sieerinn/TasohyppelyNettipeli

    • Property svn:ignore
      •  

        old new  
        11*.suo 
         2*.user 
  • 2015/koodauskerho/sieerinn/TasohyppelyNettipeli/GameServer/GameServer.cs

    r7141 r7143  
    8181    public class Client 
    8282    { 
     83        private const int BLOCK_SIZE = 2048; 
     84 
    8385        private NetworkStream stream; 
    8486         
     
    9597        } 
    9698 
     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 
    97116        private void ReceiveThread() 
    98117        { 
    99             var buffer = new byte[2048]; 
     118            var buffer = new StringBuilder(); 
     119 
    100120            while (ClientSocket.Connected) 
    101121            { 
     
    104124                    if (ClientSocket.Available <= 0) continue; 
    105125 
    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); 
    109128 
    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++) 
    117130                    { 
    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                        } 
    120140                    } 
    121                     GameServer.Broadcast(this, gameName, bytes); 
    122141                } 
    123142                catch (Exception) 
  • 2015/koodauskerho/sieerinn/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli/NetworkConnection.cs

    r7142 r7143  
    22using System.IO; 
    33using System.Linq; 
     4using System.Net; 
    45using System.Net.Sockets; 
    56using System.Reflection; 
     
    78using System.Threading; 
    89using System.Runtime.Serialization.Formatters.Binary; 
     10using System.Text; 
    911 
    1012 
     
    2426    private readonly TcpClient client; 
    2527    private readonly CancellationTokenSource cancelSource; 
    26     private NetworkStream stream; 
     28    private readonly string gameName; 
     29    private NetworkStream networkStream; 
    2730    private Thread receiveThread; 
    28     private string gameName; 
    2931 
    3032    public delegate void MessageReceived(Guid id, string message); 
     
    5557    { 
    5658        client.Connect(ip, port); // TODO: try 
    57         stream = client.GetStream(); 
     59        networkStream = client.GetStream(); 
    5860        receiveThread = new Thread(() => ReceiveThread(cancelSource.Token)); 
    5961        receiveThread.Start(); 
     
    6870        cancelSource.Cancel(); 
    6971        receiveThread.Join(); 
    70         stream.Close(); 
     72        networkStream.Close(); 
    7173        client.Client.Close(); 
    7274        client.Close(); 
     
    7476    } 
    7577 
    76     private void Send(MessageType type, string message="") 
     78    private void Send(MessageType type, string message = "") 
    7779    { 
    78         var mstream = new MemoryStream(); 
    79         var writer = new BinaryWriter(mstream); 
     80        //var mstream = new MemoryStream(); 
     81        //var writer = new BinaryWriter(mstream); 
    8082 
    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 
    84107        if (message.Length > 0) 
    85             writer.Write(message); 
     108        { 
     109            builder.Append(message); 
     110            builder.Append('\x01'); 
     111        } 
    86112 
    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(); 
    90118    } 
    91119 
     
    119147    } 
    120148 
     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 
    121172    private void ReceiveThread(CancellationToken cancelToken) 
    122173    { 
     174        var buffer = new StringBuilder(); 
     175 
    123176        while (!cancelToken.IsCancellationRequested) 
    124177        { 
    125             if (client.Available == 0) continue; 
     178            if (client.Available == 0) 
     179                continue; 
    126180 
    127181            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); 
    135183 
    136             if (messageType == MessageType.Message && OnMessageReceive != null) 
     184            for (int i = 0; i < bytesRead; i++) 
    137185            { 
    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                } 
    148195            } 
    149196        } 
  • 2015/koodauskerho/sieerinn/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli/TasohyppelyNettipeli.cs

    r7141 r7143  
    4141        yhteys.OnConnect += UusiPelaaja; 
    4242        yhteys.OnDisconnect += PoistaPelaaja; 
    43         yhteys.Connect("192.168.0.100", 8888); 
     43        yhteys.Connect("192.168.0.100", 3074); 
    4444        Exiting += yhteys.Close; 
    4545 
     
    6969    void UusiViesti(Guid id, string viesti) 
    7070    { 
     71        if (!muutPelaajat.ContainsKey(id)) 
     72        { 
     73            muutPelaajat.Add(id, LuoPelaaja()); 
     74        } 
    7175        Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti); 
    7276        muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y); 
Note: See TracChangeset for help on using the changeset viewer.