예제 #1
0
 public Paket(PaketType paketType, byte[] dataBuffer)
 {
     PaketType     = paketType;
     Data          = dataBuffer;
     PaketGroupId  = Guid.NewGuid();
     PaketMaxCount = 1;
     PaketPosition = PaketPosition.Start;
     PaketNumber   = 1;
 }
예제 #2
0
 public void SendBytes(PaketType type, byte[] content, int id, Socket socket)
 {
     ITypeTranslator translator = _context.GetObject<ITypeTranslator>();
     int typeId = translator.translateType(type);
     byte[] packet = CommunicationHelper.createPaket(content, typeId, id);
     lock (socket)
     {
         socket.Send(packet);
     }
 }
예제 #3
0
        public static void RunPaketCommand(string rootDir, string paketExePath, PaketType paketType, string command, string args, CancellationToken cancellationToken)
        {
            var arguments = paketType switch
            {
                PaketType.Exe => $"{command} {args ?? string.Empty}".Trim(),
                PaketType.GlobalTool => $"{command} {args ?? string.Empty}".Trim(),
                PaketType.LocalTool => $"paket {command} {args ?? string.Empty}".Trim(),
                _ => throw new ArgumentOutOfRangeException(nameof(paketType), paketType, null)
            };

            Run(rootDir, paketExePath, arguments, cancellationToken);
        }
예제 #4
0
        public static Paket[] GetPakets(int paketSize, PaketType paketType, byte[] data)
        {
            // Wenn data kleiner als die vorgegebene maximalgröße ist
            // braucht diese nicht gesplitted werden und muss in kein großen Buffer gesteckt werden
            paketSize = paketSize < (data.Length + _paketSizeWithoutData) ? paketSize : (data.Length + _paketSizeWithoutData);

            var          paketGroupId = Guid.NewGuid();
            List <Paket> pakets       = new List <Paket>();

            using (var memoryStream = new MemoryStream(data))
            {
                while (memoryStream.Position < memoryStream.Length)
                {
                    byte[] buffer = new byte[paketSize - _paketSizeWithoutData];
                    var    paket  = new Paket();
                    paket.PaketGroupId = paketGroupId;
                    paket.PaketType    = paketType;
                    paket.PaketNumber  = pakets.Count;

                    if (memoryStream.Position == 0)
                    {
                        paket.PaketPosition = PaketPosition.Start;
                        memoryStream.Read(buffer, 0, buffer.Length);
                        paket.Data = buffer;
                        pakets.Add(paket);
                        continue;
                    }

                    var readed = memoryStream.Read(buffer, 0, buffer.Length);
                    paket.Data = buffer.Take(readed).ToArray();

                    if (memoryStream.Position == memoryStream.Length)
                    {
                        paket.PaketPosition = PaketPosition.End;
                        pakets.Add(paket);
                        continue;
                    }

                    paket.PaketPosition = PaketPosition.Between;
                    pakets.Add(paket);
                }

                foreach (var paket in pakets)
                {
                    paket.PaketMaxCount = pakets.Count;
                }

                return(pakets.ToArray());
            }
        }
예제 #5
0
        public void HandlePaket(PaketType type, byte[] content, int id)
        {
            //Bei einem IsAliveRequest der Timer dieses Threads zurücksetzen
            if(type == PaketType.IsAliveRequest)
            {
                _timeouthandler.HandleMessage(content, id);
                return;
            }

            lock (_modules)
            {
            IModuleHandler module = _modules.Where<IModuleHandler>(x => x.HandleType == type).FirstOrDefault();
            if (module != null)
            {
                lock (module)
                {
                module.HandleMessage(content, id, _socket);
                }
            }
            else
                throw new ModuleNotImplementedException(type.ToString());
            }
        }
예제 #6
0
 public int translateType(PaketType type)
 {
     switch (type)
         {
             case PaketType.ConnectionInfo:
                 return ConnectionInfo;
             case PaketType.NewPlayerInfo:
                 return NewPlayerInfo;
             case PaketType.UserInformInfo:
                 return UserInformInfo;
             case PaketType.IsAliveRequest:
                 return IsAliveRequest;
             case PaketType.FileUpload:
                 return FileUpload;
             case PaketType.TableUpload:
                 return TableUpload;
             case PaketType.Message:
                 return Message;
             case PaketType.PersonalMessage:
                 return PersonalMessage;
             default:
                 throw new TypeNotKnownException("Unbekannter Typ: " + type.ToString());
         }
 }
예제 #7
0
 public void SendTime(PaketType type, long ms, int id, Socket socket)
 {
     byte[] contentBytes = BitConverter.GetBytes(ms);
     SendBytes(type, contentBytes, id, socket);
 }
예제 #8
0
 public void SendStream(PaketType type, Stream content, int id, Socket socket)
 {
     byte[] contentBytes = new byte[content.Length];
     content.Read(contentBytes, 0, (int)content.Length - 1);
     SendBytes(type, contentBytes, id, socket);
 }
예제 #9
0
 public void SendMessage(PaketType type, string content, int id, Socket socket)
 {
     byte[] contentBytes = CommunicationHelper.EncodeString(content);
     SendBytes(type, contentBytes, id, socket);
 }
예제 #10
0
 public void SendInt(PaketType type, int content, int id, Socket socket)
 {
     byte[] contentBytes = BitConverter.GetBytes(content);
     SendBytes(type, contentBytes, id, socket);
 }
예제 #11
0
 public PaketInfo(string paketPath, PaketType toolType)
 {
     PaketPath = paketPath;
     ToolType  = toolType;
 }