Ответить
24.07.2013, 13:48
Аватар для r_a_u_l
r_a_u_l r_a_u_l вне форума Интересующийся
Регистрация: 29.12.2010 / Сообщений: 11
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию MQL4 - reading named pipes - help needed

hello

having the following peace of code:

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
NamedPipeClientStream pipeClient =
new NamedPipeClientStream(".", "EURUSD", PipeDirection.In);

Console.WriteLine("Connecting to server...\n");
pipeClient.Connect();
StreamReader ss = new StreamReader(pipeClient);
while (true)
{
Console.WriteLine("From pipe: " + ss.ReadLine());
Thread.Sleep(1200);
}
pipeClient.Close();
}
}
}

please help me translate this in mq4 code / a reading function that returns bid and ask

best regards

raul

Последний раз редактировалось Ирина К; 29.05.2014 в 14:06.
25.07.2013, 23:27
Аватар для testopal
testopal testopal вне форума Местный житель
Регистрация: 04.07.2013 / Сообщений: 97
Поблагодарили 164 раз(а) / Репутация: 165
for Calgo ?
26.07.2013, 07:23
Аватар для r_a_u_l
r_a_u_l r_a_u_l вне форума Интересующийся
Регистрация: 29.12.2010 / Сообщений: 11
Поблагодарили 0 раз(а) / Репутация: 1
for Calgo ?
i do not know what calgo is, it does not sound familiar

thank you anyway,

raul
26.07.2013, 11:14
Аватар для testopal
testopal testopal вне форума Местный житель
Регистрация: 04.07.2013 / Сообщений: 97
Поблагодарили 164 раз(а) / Репутация: 165
C помощью StreamReader ss = new StreamReader я не смог создать pipe server и clent. Но нашел пример, как передавать строки через bytes. Этот пример рабочий, я его использовал в своей работе.

PipeServer

Скрытый текст

PHP код:
//+------------------------------------------------------------------+
//|                                                   PipeServer.mq4 |
//|                             Copyright © 2010, Stephen Ambatoding |
//|                                        sangmane@forexfactory.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Stephen Ambatoding"
#property link      "sangmane@forexfactory.com"

#define PIPE_TYPE_MESSAGE            4
#define PIPE_READMODE_MESSAGE        2
#define PIPE_WAIT                    0
#define PIPE_ACCESS_DUPLEX          3
#define PIPE_UNLIMITED_INSTANCES     255
#define NMPWAIT_USE_DEFAULT_WAIT    0
#define INVALID_HANDLE_VALUE         -1
#define ERROR_PIPE_CONNECTED         535

#import "kernel32.dll"
    
int CreateNamedPipeA(string PipeName,int dwOpenMode,int dwPipeMode,int nMaxInstances,int nOutBufferSize,int nInBufferSize,int nDefaultTimeOut,int lpSecurityAttributes);
    
int ConnectNamedPipe(int hPipe,int lpOverlapped);
    
int ReadFile(int hPipeintinBuffer[],int NumberOfBytesToReadintbytesRead[], int lpOverlapped);
    
int WriteFile(int hPipestring sBufferint NumberOfBytesToWriteintbytesWritten[], int lpOverlapped);
    
int FlushFileBuffers(int hPipe);
    
int DisconnectNamedPipe(int hPipe);
    
int CloseHandle(int hPipe);
#import

string lastMessage="";
extern string Pipe "Pipe1";

int start()
{
Print (
"PipeServer");
    
string PipeName "\\\\.\\pipe\\"+Pipe;
    
int PipeMode PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT;
    
int hPipe CreateNamedPipeA(PipeName,PIPE_ACCESS_DUPLEX,PipeMode,PIPE_UNLIMITED_INSTANCES,1024,1024,NMPWAIT_USE_DEFAULT_WAIT,NULL);
    if (
hPipe == INVALID_HANDLE_VALUE) {
        
Alert("CreateNamedPipe failed");
           return (-
1);
    }
    while(!
IsStopped())    {

        
Comment("Pipe server ready ...\nSend \"STOP\" to stop server\n",lastMessage);
        
bool fConnected ConnectNamedPipe(hPipeNULL) != 0;
        if(!
fConnected)
            
fConnected GetLastError() == ERROR_PIPE_CONNECTED;
            
        if (
fConnected) {
            
int inBuffer[256];
            
int bytesRead[1];
            
bool fSuccess ReadFile(hPipe,inBuffer,4*ArraySize(inBuffer),bytesRead,NULL) !=0;
            if (!
fSuccess || (bytesRead[0] == 0)) break;
            
string inString="";
            for(
int i=0i<bytesRead[0]; i++)
                
inString inString CharToStr( (inBuffer[i/4] >> ((3)*8)) & 0xff);
            
lastMessage "Last message from client: "+inString;
            
string outString "Received ["+inString+"]";
            
int bytesWritten[1];
            
fSuccess WriteFile(hPipe,outString,StringLen(outString)+1,bytesWritten,NULL) != 0;
            if (! 
fSuccess || bytesWritten[0] != StringLen(outString)+1) break;
            if(
inString=="STOP") {
                
Comment("Pipe server stopped.");
                
FlushFileBuffers(hPipe);
                
DisconnectNamedPipe(hPipe);
                
CloseHandle(hPipe);                
                return(
0);
            }            
        }
        
FlushFileBuffers(hPipe);
        
DisconnectNamedPipe(hPipe);
    }    
    
CloseHandle(hPipe);            
    return(
0);

[свернуть]


pipe client

Скрытый текст

PHP код:
//+------------------------------------------------------------------+
//|                                                   PipeClient.mq4 |
//|                             Copyright © 2010, Stephen Ambatoding |
//|                                        sangmane@forexfactory.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Stephen Ambatoding"
#property link      "sangmane@forexfactory.com"
#property show_inputs

#define ERROR_MORE_DATA 234

#import "kernel32.dll"
    
int CallNamedPipeA(string PipeNamestring outBufferint outBufferSzintinBuffer[], int inBufferSzintbytesRead[], int timeOut);
#import

extern string extMessage "Where do you want to go today?";
extern string Pipe         "Pipe1";

int start()
{
Print (
"PipeClient");
    
string PipeName "\\\\.\\pipe\\"+Pipe;
    
int inBuffer[256];
    
int bytesRead[1];
    
string sComment="";
    
Comment("Connecting to pipe server..."); 
    
bool fSuccess CallNamedPipeA(PipeName,extMessage,StringLen(extMessage)+1,inBuffer,4*ArraySize(inBuffer),bytesRead,0) != 0;
    
int lastError GetLastError();
    if (
fSuccess || lastError == ERROR_MORE_DATA) { 
        
string inString "";
        for(
int i=0i<bytesRead[0]; i++)
            
inString inString CharToStr( (inBuffer[i/4] >> ((3)*8)) & 0xff);        
        
sComment "Reply from server: "+inString;
        if(!
fSuccesssComment sComment"\nSome data was lost. Increase receiving buffer size.";        
        
Comment(sComment);            
    } else {
        Print(
"Last Error: ",lastError);
        
Comment("CallNamedPipe Failed!");
    }
    return(
0);

[свернуть]


переписать на c# этот код легко. я его портировал удачно и на c# и на delphi.
26.07.2013, 11:31
Аватар для r_a_u_l
r_a_u_l r_a_u_l вне форума Интересующийся
Регистрация: 29.12.2010 / Сообщений: 11
Поблагодарили 0 раз(а) / Репутация: 1
thank you!
28.01.2014, 17:54
Аватар для cyls
cyls cyls вне форума Интересующийся
Регистрация: 10.06.2013 / Сообщений: 3
Поблагодарили 2 раз(а) / Репутация: 3
переписать на c# этот код легко. я его портировал удачно и на c# и на delphi.
Не могли бы Вы привести код портированный на с#. Все примеры реализации namedpipes на c# почему то только с использованием StreamReader. Пример как прикрутить функцию CreateNamedPipeA к с# так и не смог найти.
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 13:30. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO