Пример #1
0
        private static void CheckMessageID(StateObject state, Socket handler)
        {
            TCPMessageID ID = (TCPMessageID)state.buffer[0];

            switch (ID)
            {
            case TCPMessageID.Message:
                PrintMessageToConsol();
                break;

            case TCPMessageID.MazeIsReceived:
                Send(handler, itemGen.ItemMessageArray);
                break;

            case TCPMessageID.ItemPositionIsReceived:
                Send(handler, trapGen.TrapMessageArray);
                break;

            case TCPMessageID.Item:
                SendMessageToTheOtherClients(handler);
                break;

            case TCPMessageID.Trap:
                SendMessageToTheOtherClients(handler);
                break;
            }
        }
Пример #2
0
 public void send(TCPMessageID id, Field message)
 {
     lock (tcpClient)
     {
         message.addField("messageID").setInt((int)id);
         message.addField("messageCounter" + messageCounter++).setInt((int)id);
         //Debug.Log("Sent to " + clientEndpoint + ": " + message);
         bool invalid = true;
         for (int i = 0; i < 5 && invalid; i++)
         {
             invalid = false;
             byte[] compressed = message.compress();
             try
             {
                 new Field(compressed);
             }
             catch (Exception ex)
             {
                 invalid = true;
                 Debug.LogWarning("Tried to send invalid message\n" + ex);
                 continue;
             }
             connection.Write(compressed, 0, compressed.Length);
             return;
         }
         Debug.LogError("Unable to compress message\n" + message);
     }
 }
Пример #3
0
 public void Send(TCPMessageID messageID, Socket client, string data)
 {
     byte[] byteForMessageID = new byte[1];
     byteForMessageID[0] = Convert.ToByte(messageID);
     byte[] byteData    = Encoding.ASCII.GetBytes(data + "<EOF>");
     byte[] byteForSend = byteForMessageID.Concat(byteData).ToArray();
     client.BeginSend(byteForSend, 0, byteForSend.Length, 0, new AsyncCallback(SendCallback), client);
 }
Пример #4
0
 public static void send(TCPMessageID id, Field message)
 {
     lock (tcpClient)
     {
         message.addField("messageID").setInt((int)id);
         byte[] compressed = message.compress();
         connection.Write(compressed, 0, compressed.Length);
     }
 }
Пример #5
0
    private void ReceiveCallback(IAsyncResult ar)
    {
        try
        {
            StateObject state     = (StateObject)ar.AsyncState;
            Socket      client    = state.workSocket;
            int         bytesRead = client.EndReceive(ar);

            if (bytesRead > 0)
            {
                TCPMessageID ID = (TCPMessageID)state.buffer[0];
                switch (ID)
                {
                case TCPMessageID.Maze:
                    Send(TCPMessageID.Message, client, ("I've received the mazeWalls! " + bytesRead.ToString()));
                    Send(TCPMessageID.MazeIsReceived, client, "I've received the mazeWalls!");
                    //remove the ID from the array
                    state.buffer = state.buffer.Where((source, index) => index != 0).ToArray();
                    ConvertTheMessageToMap(state, bytesRead);
                    break;

                case TCPMessageID.Trap:
                    //remove the ID from the array
                    state.buffer = state.buffer.Where((source, index) => index != 0).ToArray();
                    //write the healthpoint to the label
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                    response = state.sb.ToString(0, state.sb.Length - 6);
                    break;

                case TCPMessageID.TrapPosition:
                    Send(TCPMessageID.Message, client, ("I've received the traps! " + bytesRead.ToString()));
                    //remove the ID from the array
                    state.buffer = state.buffer.Where((source, index) => index != 0).ToArray();
                    ConvertTheMessageToItem(state, bytesRead);
                    break;
                }
                client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
            }
            if (state.sb.Length > 0)
            {
                state.sb = null;
            }
            receiveDone.Set();
        }
        catch (Exception e)
        {
            // Console.WriteLine(e.ToString());
        }
    }
Пример #6
0
        public static byte[] CreateMessage(TCPMessageID id, List <byte> list)
        {
            byte[] messageArray = new byte[MESSAGE_ARRAY_SIZE];
            messageArray[0] = Convert.ToByte(id);
            string str = "";

            try
            {
                str = CreateStringFromList(list);
            }
            catch (NullReferenceException e)
            {
                Console.WriteLine(e);
            }

            for (int i = 0; i < messageArray.Length - 1; i++)
            {
                messageArray[i + 1] = Convert.ToByte(SplitStringToEightChar(str, i), 2);
            }
            return(messageArray);
        }