예제 #1
0
        /// <summary>
        /// Send file back to the server
        /// </summary>
        /// <param name="netStream"></param>
        /// <param name="myMessage"></param>
        private async Task SendFileBack(NetworkStream netStream, ServerClientMessage myMessage)
        {
            byte[] SendingBuffer = null;
            try
            {
                byte[]      dataSend;
                List <byte> byteList = new List <byte>();

                string FileName = @"C:\Users\tomer\OneDrive\Desktop\FileInServer\Hello.bat";

                // If I want to get the file path from my client.
                //string FileName = Encoding.ASCII.GetString(myMessage.MyData);

                FileStream          Fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                int                 NoOfPackets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(Fs.Length) / Convert.ToDouble(1024)));
                int                 FileLength = (int)Fs.Length, CurrentPacketLength;
                ServerClientMessage myReply = new ServerClientMessage(MessageType.DownloadAndExe, FileLength);

                // Run on the file and copy it to the messageReply
                // Todo: this is example for handling large requests, maybe we'll aplly later on the netStream writing
                for (int i = 0; i < NoOfPackets; i++)
                {
                    if (FileLength > 1024)
                    {
                        CurrentPacketLength = 1024;
                        FileLength          = FileLength - CurrentPacketLength;
                    }
                    else
                    {
                        CurrentPacketLength = FileLength;
                    }
                    SendingBuffer = new byte[CurrentPacketLength];
                    Fs.Read(SendingBuffer, 0, CurrentPacketLength);
                    byteList.AddRange(SendingBuffer);
                }

                Fs.Close();

                myReply.MyData = byteList.ToArray();
                dataSend       = myReply.serialize();
                await netStream.WriteAsync(dataSend, 0, dataSend.Length);

                await netStream.FlushAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// Send file to the server
        /// </summary>
        /// <param name="FileName"></param>
        /// <returns></returns>
        public async Task ClientSendFile(string FileName)
        {
            byte[] SendingBuffer = null;
            try
            {
                if (this.myClient.Connected)
                {
                    List <byte> byteList = new List <byte>();
                    byte[]      dataSend;

                    FileStream Fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                    int        NoOfPackets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(Fs.Length) / Convert.ToDouble(1024)));
                    int        TotalLength = (int)Fs.Length, CurrentPacketLength;

                    ServerClientMessage myMessage = new ServerClientMessage(MessageType.DownloadAndExe, TotalLength);

                    for (int i = 0; i < NoOfPackets; i++)
                    {
                        if (TotalLength > 1024)
                        {
                            CurrentPacketLength = 1024;
                            TotalLength         = TotalLength - CurrentPacketLength;
                        }
                        else
                        {
                            CurrentPacketLength = TotalLength;
                        }
                        SendingBuffer = new byte[CurrentPacketLength];
                        await Fs.ReadAsync(SendingBuffer, 0, CurrentPacketLength);

                        byteList.AddRange(SendingBuffer);
                    }

                    Fs.Close();
                    myMessage.MyData = byteList.ToArray();

                    dataSend = myMessage.serialize();

                    await this.netStream.WriteAsync(dataSend, 0, dataSend.Length);

                    await this.netStream.FlushAsync();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #3
0
        private async Task SendClientRunShell(NetworkStream netStream)
        {
            try
            {
                byte[]      dataSend;
                List <byte> byteList = new List <byte>();

                ServerClientMessage myReply = new ServerClientMessage(MessageType.RunShell, 0, new byte[0]);

                dataSend = myReply.serialize();
                await netStream.WriteAsync(dataSend, 0, dataSend.Length);

                await netStream.FlushAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #4
0
        public async Task AskforShell()
        {
            try
            {
                if (this.myClient.Connected)
                {
                    byte[] data = new byte[0];
                    ServerClientMessage myMessage = new ServerClientMessage(MessageType.RunShell, data.Length, data);

                    data = myMessage.serialize();

                    await this.netStream.WriteAsync(data, 0, data.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
            }
        }
예제 #5
0
        /// <summary>
        /// Ask file from the server
        /// </summary>
        /// <param name="FileName"></param>
        /// <returns></returns>
        public async Task AskFileFromServer(string FileName)
        {
            try
            {
                if (this.myClient.Connected)
                {
                    byte[] data = Encoding.ASCII.GetBytes(FileName);
                    ServerClientMessage myMessage = new ServerClientMessage(MessageType.AskForFile, data.Length, data);

                    data = myMessage.serialize();

                    await this.netStream.WriteAsync(data, 0, data.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
            }
        }
    private void OnReceived(byte[] message, UInt16 size)
    {
        var buf = new ByteBuffer(message);

        var serverClientMessage = ServerClientMessage.GetRootAsServerClientMessage(buf);

        switch (serverClientMessage.ContentType)
        {
        case ServerClientMessageContent.VersionMessage:
            gameSystem.OnReceived(serverClientMessage.Content <VersionMessage>().Value);
            break;

        case ServerClientMessageContent.NoNewMatchesAllowedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <NoNewMatchesAllowedMessage>().Value);
            break;

        case ServerClientMessageContent.QueueUpdateMessage:
            gameSystem.OnReceived(serverClientMessage.Content <QueueUpdateMessage>().Value);
            break;

        case ServerClientMessageContent.QueueLeftMessage:
            gameSystem.OnReceived(serverClientMessage.Content <QueueLeftMessage>().Value);
            break;

        case ServerClientMessageContent.RoomCreatedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <RoomCreatedMessage>().Value);
            break;

        case ServerClientMessageContent.RoomEnteredMessage:
            gameSystem.OnReceived(serverClientMessage.Content <RoomEnteredMessage>().Value);
            break;

        case ServerClientMessageContent.UserEnteredRoomMessage:
            gameSystem.OnReceived(serverClientMessage.Content <UserEnteredRoomMessage>().Value);
            break;

        case ServerClientMessageContent.UserLeftRoomMessage:
            gameSystem.OnReceived(serverClientMessage.Content <UserLeftRoomMessage>().Value);
            break;

        case ServerClientMessageContent.RoomDeletedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <RoomDeletedMessage>().Value);
            break;

        case ServerClientMessageContent.UserSelectedTeamMessage:
            gameSystem.OnReceived(serverClientMessage.Content <UserSelectedTeamMessage>().Value);
            break;

        case ServerClientMessageContent.InvalidRoomTokenMessage:
            gameSystem.OnReceived(serverClientMessage.Content <InvalidRoomTokenMessage>().Value);
            break;

        case ServerClientMessageContent.InvalidClientTokenMessage:
            gameSystem.OnReceived(serverClientMessage.Content <InvalidClientTokenMessage>().Value);
            break;

        case ServerClientMessageContent.MatchInitializedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <MatchInitializedMessage>().Value);
            break;

        case ServerClientMessageContent.InitGameMessage:
            gameSystem.OnReceived(serverClientMessage.Content <InitGameMessage>().Value);
            break;

        case ServerClientMessageContent.MatchStartMessage:
            gameSystem.OnReceived(serverClientMessage.Content <MatchStartMessage>().Value);
            break;

        case ServerClientMessageContent.MatchFinishedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <MatchFinishedMessage>().Value);
            break;

        case ServerClientMessageContent.MatchCancelledMessage:
            gameSystem.OnReceived(serverClientMessage.Content <MatchCancelledMessage>().Value);
            break;

        case ServerClientMessageContent.PlayerConnectionChangedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <PlayerConnectionChangedMessage>().Value);
            break;

        case ServerClientMessageContent.PlayerPositionMessage:
            gameSystem.OnReceived(serverClientMessage.Content <PlayerPositionMessage>().Value);
            break;

        case ServerClientMessageContent.SpaceshipRespawnedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <SpaceshipRespawnedMessage>().Value);
            break;

        case ServerClientMessageContent.SpaceshipLifePointsChangedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <SpaceshipLifePointsChangedMessage>().Value);
            break;

        case ServerClientMessageContent.SpaceshipDestroyedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <SpaceshipDestroyedMessage>().Value);
            break;

        case ServerClientMessageContent.SpaceshipHealingChangedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <SpaceshipHealingChangedMessage>().Value);
            break;

        case ServerClientMessageContent.SpaceshipHitMessage:
            gameSystem.OnReceived(serverClientMessage.Content <SpaceshipHitMessage>().Value);
            break;

        case ServerClientMessageContent.ProjectileShotMessage:
            gameSystem.OnReceived(serverClientMessage.Content <ProjectileShotMessage>().Value);
            break;

        case ServerClientMessageContent.ProjectileDirectionChangedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <ProjectileDirectionChangedMessage>().Value);
            break;

        case ServerClientMessageContent.ProjectileDisappearedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <ProjectileDisappearedMessage>().Value);
            break;

        case ServerClientMessageContent.ControlPointTakenMessage:
            gameSystem.OnReceived(serverClientMessage.Content <ControlPointTakenMessage>().Value);
            break;

        case ServerClientMessageContent.ControlPointContestingChangedMessage:
            gameSystem.OnReceived(serverClientMessage.Content <ControlPointContestingChangedMessage>().Value);
            break;
        }
    }