/// <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); } }
/// <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); } }
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); } }
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 { } }
/// <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; } }